熊猫数据框循环

时间:2018-08-23 13:47:20

标签: python pandas for-loop

我想用另一列的一部分替换pandas数据框中的一列。到目前为止,我有:

for index, row in df.iterrows():
  File = df.at[row, 'FileName']
  df.at[row, 'NUMBER'] = File.split(".")[1]

理想情况下,这将遍历数据帧的各行,并将number列替换为FileName列的一部分

我遇到了错误:

  

ValueError:基于整数索引的索引只能有整数索引器

,我认为这与df.at []的滥用有关,但我不确定如何解决它。

3 个答案:

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

for more info

我更喜欢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]