将带有分组数据的 CSV 导入 Pandas 数据框 [重复]

Posted

技术标签:

【中文标题】将带有分组数据的 CSV 导入 Pandas 数据框 [重复]【英文标题】:Importing a CSV with grouped data into a Pandas data frame [duplicate] 【发布时间】:2019-01-16 17:41:47 【问题描述】:

当我使用 Pandas 导入数据文件时,我得到以下数据框:

    product feature_1   feature_2
0   a   11  12
1   NaN 13  14
2   NaN 15  16
3   NaN 17  18
4   NaN 19  20
5   b   21  22
6   NaN 23  24
7   NaN 25  26
8   c   27  28
9   NaN 29  30
10  NaN 31  32

我需要做的是将 NaN 替换为它们上方的下一个非 NaN 元素,以便我得到以下数据框:

    product feature_1   feature_2
0   a   11  12
1   a   13  14
2   a   15  16
3   a   17  18
4   a   19  20
5   b   21  22
6   b   23  24
7   b   25  26
8   c   27  28
9   c   29  30
10  c   31  32

我做了什么(代码和数据文件见gist):

将我的数据导入字典列表 遍历列表并进行修改 将列表导入数据框

如何在不事先进行列表预处理的情况下直接在 Pandas 中实现这一点?

【问题讨论】:

你可以只做df['product'] = df['product'].ffill(),但是,如果你想回到分组的df,你可以传递多索引的序数位置:pd.read_csv(your_file_path, index_col=[0,1])。那么你想取回多索引df吗? 不是真的,我接受了答案-谢谢 【参考方案1】:

您可以使用pd.Series.ffill来避免字典转换和手动迭代:

df['product'].ffill(inplace=True)

print(df)

   product  feature_1  feature_2
0        a         11         12
1        a         13         14
2        a         15         16
3        a         17         18
4        a         19         20
5        b         21         22
6        b         23         24
7        b         25         26
8        c         27         28
9        c         29         30
10       c         31         32

【讨论】:

OP 实际上可能想要回到多索引 df,我对此发表了评论,因此我们将看看是否是这种情况。如果是这样,我们应该找到不同的欺骗 @EdChum,知道了,如果是这种情况,请随时重新打开 :)

以上是关于将带有分组数据的 CSV 导入 Pandas 数据框 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 读取 CSV 时如何在列中保持前导零?

Pandas:使用循环和分层索引将多个 csv 文件导入数据帧

将 Google 电子表格 CSV 导入 Pandas 数据框

将文本文件中的数据导入 pandas 数据框

使用两个分隔符将 CSV 导入 pandas

Pandas 多层级索引 Python 数据处理案例指南