Pythonでpandasを利用してデータ整理を行なっておりますが、DataFrameで挙動しているはずが、途中でNonetypeに変わってしまいます。その影響だと思われますが、to.csvで書き出せない現状です。
使用デバイス・バージョン
Macbook pro
Mac OS ver.12.3.1
Python 3.8.1 64bit
pandas 1.1.3
df_1をexec()の外に出すと
AttributeError: 'NoneType' object has no attribute 'to_csv'
というエラーが返ってきます。
to.csvで書き出せなくても良いのですが、関数から導き出した結果を計算で使いたいため、returnでresultを返しても、Noneと帰ってきてしまいます。
どなたか解決方法をご教授いただけないでしょうか。
こちらが原因のコードになります。
import pandas as pd import numpy as np df_all = pd.read_csv('pass', encoding='shift-jis', sep=',', index_col=False,) def count_traffic(time_start,time_end,timezone,direction,size): #サイズの分岐 if size == "light": shashu = "小" else: shashu = "大" #向きの分岐 if direction == "up": direction_name = "上り" elif direction == "down": direction_name = "下り" else: direction_name = "上下計" time_end = time_end + 1 exec(f"{timezone}_{size}_{direction} = pd.DataFrame([])") exec(f"print({timezone}_{size}_{direction})") for time in range(time_start,time_end): exec(f"{timezone}_{size}_{direction}_{time} = list(df_all['時間交通量/{direction_name}/{shashu}型車(台) ({time}-{time+1}h)'])") exec(f"{timezone}_{size}_{direction}_{time} = pd.DataFrame({timezone}_{size}_{direction}_{time})") exec(f"{timezone}_{size}_{direction} = {timezone}_{size}_{direction}.add({timezone}_{size}_{direction}_{time},fill_value=0)") exec(f"print(type({timezone}_{size}_{direction}))") result = f"{timezone}_{size}_{direction}" print(f"{timezone}_{size}_{direction}") df_1.to_csv('pass')
error
NameError: name 'df_1' is not defined
もともとのコードは以下のものであり、こちらを関数にするとうまく挙動致しません。
import pandas as pd from pandas.core.accessor import delegate_names import numpy as np df_all = pd.read_csv('pass', encoding='shift-jis', sep=',', index_col=False,) df_ex1= df_all.copy() DAY_light_up = pd.DataFrame([]) DAY_heavy_up = pd.DataFrame([]) DAY_light_down = pd.DataFrame([]) DAY_heavy_down = pd.DataFrame([]) DAY_light_all = pd.DataFrame([]) DAY_heavy_all = pd.DataFrame([]) # DAYの総台数(7時〜18時) for time in range(7,19): exec(f"DAY_light_up_{time} = list(df_all['時間交通量/上り/小型車(台) ({time}-{time+1}h)'])") exec(f"DAY_heavy_up_{time} = list(df_all['時間交通量/上り/大型車(台) ({time}-{time+1}h)'])") exec(f"DAY_light_down_{time} = list(df_all['時間交通量/下り/小型車(台) ({time}-{time+1}h)'])") exec(f"DAY_heavy_down_{time} = list(df_all['時間交通量/下り/大型車(台) ({time}-{time+1}h)'])") exec(f"DAY_light_all_{time} = list(df_all['時間交通量/上下計/小型車(台) ({time}-{time+1}h)'])") exec(f"DAY_heavy_all_{time} = list(df_all['時間交通量/上下計/大型車(台) ({time}-{time+1}h)'])") exec(f"DAY_light_up_{time} = pd.DataFrame(DAY_light_up_{time})") exec(f"DAY_heavy_up_{time} = pd.DataFrame(DAY_heavy_up_{time})") exec(f"DAY_light_down_{time} = pd.DataFrame(DAY_light_down_{time})") exec(f"DAY_heavy_down_{time} = pd.DataFrame(DAY_heavy_down_{time})") exec(f"DAY_light_all_{time} = pd.DataFrame(DAY_light_all_{time})") exec(f"DAY_heavy_all_{time} = pd.DataFrame(DAY_heavy_all_{time})") exec(f"DAY_light_up = DAY_light_up.add(DAY_light_up_{time},fill_value=0)") exec(f"DAY_heavy_up = DAY_heavy_up.add(DAY_heavy_up_{time},fill_value=0)") exec(f"DAY_light_down = DAY_light_down.add(DAY_light_down_{time},fill_value=0)") exec(f"DAY_heavy_down = DAY_heavy_down.add(DAY_heavy_down_{time},fill_value=0)") exec(f"DAY_light_all = DAY_light_all.add(DAY_light_all_{time},fill_value=0)") exec(f"DAY_heavy_all = DAY_heavy_all.add(DAY_heavy_all_{time},fill_value=0)") print(DAY_light_up) #求めたい結果が出力されます。 #Typeは<class 'pandas.core.frame.DataFrame'>です
回答1件
あなたの回答
tips
プレビュー