如何使用python(pandas)更新CSV文件中所有行的最后一列值

时间:2018-08-23 07:40:05

标签: python pandas

我正在尝试使用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='|')

2 个答案:

答案 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'