我想用另一列的一部分替换pandas数据框中的一列。到目前为止,我有:
for index, row in df.iterrows():
File = df.at[row, 'FileName']
df.at[row, 'NUMBER'] = File.split(".")[1]
理想情况下,这将遍历数据帧的各行,并将number列替换为FileName列的一部分
我遇到了错误:
ValueError:基于整数索引的索引只能有整数索引器
,我认为这与df.at []的滥用有关,但我不确定如何解决它。
答案 0 :(得分:3)
不要通过iterrows
循环,因为slow最好使用str.split
通过索引来选择第二个列表:
df['NUMBER'] = df['FileName'].str.split(".").str[1]
或者如果需要更好的性能,请使用list comprehension
:
df['NUMBER'] = [x.split(".")[1] for x in df['FileName']]
答案 1 :(得分:1)
如果您想知道错误
将df.at[row, 'NUMBER']
更改为df.at[index, 'NUMBER']
,应改为index
,而不是整个数据帧的row
应该是这样
for index, row in df.iterrows():
df.at[index, 'NUMBER'] = row['FileName'].split(".")[1]
我更喜欢jezrael的答案
答案 2 :(得分:0)
我相信您要查找的是“拆分”和“ expand = True”的组合。工作示例:
import pandas as pd
col_1 = ['abc', 'abc', 'bcd', 'bcd']
col_2 = ['james.25', 'jane.23', 'andrew.15', 'jim.22']
data = pd.DataFrame({'NUMBER': col_1, 'FileName': col_2})
data['NUMBER'] = data['FileName'].str.split('.', expand=True)[1]