【发布时间】:2021-04-13 10:31:11
【问题描述】:
我有超过 15 个 csv 文件。 csv file 1 to file 4 加载为数据框时如下所示
df = pd.DataFrame({'person_id': [101,101,101,101],
'Date':['06/08/2014 08:00:00 AM','06/01/2014 05:00:00 AM','06/03/2014 08:00:00 AM','06/09/2014 05:00:00 AM'],
'Test':['A1','B2','B5','B6']})
csv file 5 to file 15 如下图所示
df1 = pd.DataFrame({'person_id': [201,201,201,201],
'Date':[np.nan,np.nan,'06/03/2014 08:00:00 AM','06/09/2014 05:00:00 AM'],
'Test':['A1','B2','B5','B6'],
'date_backup':['03/01/2014 08:00:00 AM','10/08/2014 08:00:00 AM','09/09/2014 08:00:00 AM',np.nan]})
从示例数据框 df1(文件 5 到文件 15)中可以看到,我有两个 date 列
现在从file 5 to file 15,我想通过复制另一个值来填充date_backup 或Date。
例如,我想做下面的事情
df1.Date.fillna(df.date_backup, inplace=True)
df1.date_backup.fillna(df.Date, inplace=True)
现在,我不确定如何在下面的代码中执行上述fillna() 操作
我尝试了以下但不确定它是否高效优雅
pat_dir = ['Path1\path2\La*.csv','Path3\Path4\20*.csv']
files_grabbed = []
for files in pat_dir:
files_grabbed.extend(glob.glob(files))
d = {'date_backup':'Date'}
cols = ['Date','Test','value','person_id']
dfs = [pd.read_csv(f, sep=",",low_memory=False).rename(columns=d).reindex(columns=cols)
for f in files_grabbed] #thanks to Jezrael for this code
在上面的代码中,您可以看到我正在重命名date_backup 列。
如何高效优雅地填充na()
我希望我的输出是 15 个 csv 文件的连接/附加数据框,如下所示(带有一个日期列)。我唯一的问题是如何在附加数据帧之前填写na(),所以我只有Date 列
【问题讨论】:
-
如果你想用另一列的数据填充一列的NA,你可以使用
df['Col1'].fillna(df['Col2']) -
我只想填写有两个日期列的文件,即
Date和date_backup... 如果您看到文件 1 到文件 4,我们没有to fillna.. 我们只对文件 5-15 进行填充 -
对于文件 5 到 15,fillna() 的逻辑与 post 中的示例代码相同。
-
我明白了,需要
df1.date_backup.fillna(df1.Date, inplace=True)而不是df1.date_backup.fillna(df.Date, inplace=True)- 在一个 DataFrame 中工作,而不是一个接一个地填充 df。 -
是的,正确的...
标签: python pandas dataframe glob fillna