用上一列中的值填充熊猫数据框中的“无”值
Posted
技术标签:
【中文标题】用上一列中的值填充熊猫数据框中的“无”值【英文标题】:Filling up "None" values in pandas dataframe with values from previous column 【发布时间】:2022-01-21 12:45:37 【问题描述】:我正在调用一个返回 JSON 文件的 API。当我将 JSON 文件解析为 pandas 数据框时,它会返回下表:
Level 1 | Level 2 | Level 3 |
---|---|---|
Total | Category1 | Category 1.2 |
Total | None | None |
Total | Category 2 | None |
Total | Category 2 | Category 2.1 |
Total | Category 3 | None |
Total | Category 3 | Category 3.1 |
如您所见,类别分为三个级别。我想用之前列中的值替换列中的“无”值。数据框应如下所示:
Level 1 | Level 2 | Level 3 |
---|---|---|
Total | Category1 | Category 1.2 |
Total | Total | Total |
Total | Category 2 | Category 2 |
Total | Category 2 | Category 2.1 |
Total | Category 3 | Category 3 |
Total | Category 3 | Category 3.1 |
我已经尝试了一些循环和以下代码:
for i in range(len(df.columns)):
df.iloc[:,i] = np.where(df.iloc[:,i] == "None",df.iloc[:,i+1],df.iloc[:,i])
但这不起作用。我怎样才能做到这一点?
谢谢!
【问题讨论】:
【参考方案1】:确保您的None
实际上是np.nan
,然后您的任务将变得简单,因为沿ffill(axis=1)
列的前向填充将满足您的需求:
df.replace('None',np.nan,inplace=True)
df_f = df.ffill(axis=1)
print(df_f)
Level 1 Level 2 Level 3
0 Total Category1 Category 1.2
1 Total Total Total
2 Total Category 2 Category 2
3 Total Category 2 Category 2.1
4 Total Category 3 Category 3
5 Total Category 3 Category 3.1
【讨论】:
【参考方案2】:DataFrame.ffill
适用于 Python None
对象。通过axis=1
跨列填充:
filled = df.ffill(axis=1)
print(filled)
Level 1 Level 2 Level 3
0 Total Category1 Category 1.2
1 Total Total Total
2 Total Category 2 Category 2
3 Total Category 2 Category 2.1
4 Total Category 3 Category 3
5 Total Category 3 Category 3.1
【讨论】:
以上是关于用上一列中的值填充熊猫数据框中的“无”值的主要内容,如果未能解决你的问题,请参考以下文章