我正在尝试使用Pandas更新csv文件中所有行的最后一列值。但是在更新值时,其他列的值都将丢失。
file = r'Test.csv'
# Read the file
df = pd.read_csv(file, error_bad_lines=False)
# df.at[3, "ingestion"] = '20'
df.set_value(1, "ingestion", '30')
df.to_csv("Test.csv", index=False, sep='|')
答案 0 :(得分:1)
将DataFrame.iloc
与-1
一起用于选择最后一列,而:
用于选择所有行:
df = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')})
print (df)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
df.iloc[:, -1] = '20'
print (df)
A B C D E F
0 a 4 7 1 5 20
1 b 5 8 3 3 20
2 c 4 9 5 6 20
3 d 5 4 7 9 20
4 e 5 2 1 2 20
5 f 4 3 0 4 20
编辑:
通过最后一个编辑值交换-1
与:
更新所有行,并通过DataFrame.iat
获取最后一列值:
df.iloc[-1, :] = df.iat[-1, -1]
print (df)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 b b b b b b
答案 1 :(得分:0)
pd.DataFrame.set_value
不适合在列中设置所有值。根据文档,它用于在特定的行和列标签组合处设置标量。
此外,从v0.21开始,不推荐使用.at
/ .iat
访问器。
相反,假设您没有重复的列名,则可以通过提取最终的列标签来直接设置值:
df[df.columns[-1]] = '20'
或者,更直接地,您可以使用iloc
访问器:
df.iloc[:, -1] = '20'