我正在尝试使用 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='|')
使用带有-1
DataFrame.iloc
选择最后一列,:
选择所有行:
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
pd.DataFrame.set_value
不适合设置列中的所有值。根据文档,它用于在特定行和列标签组合中设置标量。
此外,从 v0.21 开始,它已被弃用,取而代之的是.at
/.iat
访问器。
相反,您可以通过提取最终列标签来直接设置值,假设您没有重复的列名:
df[df.columns[-1]] = '20'
或者,更直接地说,您可以使用iloc
访问器:
df.iloc[:, -1] = '20'