我想在熊猫中使用fillna命令来估算数据框。这是我的代码段:
import glob
import pandas as pd
files=glob.glob("IN.201*.csv")
i=0
n=1
#the while loops are for reading and writing different subsets of the table into
#different .txt files:
while i<15:
j=0
while j<7:
dfs=[]
m=1
#for loop over only one file for testing:
for file in files[:1]:
z=i+1
#reading subset of the dataframe:
k=float(68.109375)+float(1.953125)*i
k1=float(68.109375)+float(1.953125)*z
l=float(8.0)+float(4)*j
l1=float(8.0)+float(4)*(j+1)
df=pd.read_csv(path+file).query( '@k <= lon < @k1 and @l < lat <= @l1')[['lon','lat','country','avg']]
#renaming columns in df:
df.rename(columns={"avg":"Day"+str(m)}, inplace=True)
#print(df)
m=m+1
dfs.append(df)
#imputation:
df_final=dfs[0].fillna(method='bfill', axis='columns', inplace=True).fillna(method='ffill', axis=1, inplace=True)
#writing to a txt file:
with open('Region_'+str(n), 'w+') as f:
df_final.to_csv(f)
n=n+1
j=j+1
i=i+1
错误:
Traceback (most recent call last):
File "imputation_test.py", line 42, in <module>
df_final=dfs[0].fillna(method='bfill', axis='columns', inplace=True).fillna(
method='ffill', axis=1, inplace=True)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-
packages\p
andas\core\frame.py", line 3787, in fillna
downcast=downcast, **kwargs)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\generic.py", line 5359, in fillna
raise NotImplementedError()
NotImplementedError
代码动机:
我本质上是想将.csv文件读入由该表的不同子集组成的多个数据帧中(因此,我使用了所有循环),以便重新排列和拆分.csv文件(实际上我想对多个.csv文件执行此操作),以使其更合适。然后,我想使用沿着列轴的fillna命令填充丢失的数据。
该代码的结构可以读入多个.csv文件,因此具有不必要的命令,例如'df = []'和'for loop',但是为了简化起见,我首先尝试使用此代码来确保得到这个错误。 请随时询问有关此错误的更多信息。 谢谢!
答案 0 :(得分:2)
答案 1 :(得分:0)
当数据框中同时包含int和NaN时,使用ffill
(这是fillna(method='ffill')
的同义词)用inplace=True
填充列中的缺失值时,我遇到了此错误。同一行。
解决方法是使用inplace=False
:
df = pd.DataFrame(data={'a': [1]})
df = df.reindex(columns=['a', 'b', 'c']) # columns b and c contain NaN
df.ffill(axis='columns', inplace=True) # raises NotImplementedError
df = df.ffill(axis='columns') # works (inplace defaults to False)