对象类型系列没有命名为1的轴

2024-10-01 22:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用df.iloc[I]在数据帧的每一行上分配(ori+gap)。但我得到了“没有为对象类型系列命名为1的轴”错误。我不明白为什么

df1 = pd.read_csv('异常销量监控_0127_to Xiaolei Eagle send.csv',low_memory=False)
df2 = pd.read_csv('test0412.csv',dtype = {'Actual':float})
gap = 0
for i in range(len(df2)):
  ym = df2['YM'].iloc[i]
  kcode = df2['REPKCode'].iloc[i]
  fn = df2['FamilyNameE'].iloc[i]
  ori = float(df2['Actual'].iloc[i])
  filt = (df1['YM'] == ym )& (df1['REPKCode'] == kcode) & (df1['FamilyNameE'] == fn))
  gap = df1[filt]['Actual']
  df2['Actual'].iloc[i] = (ori + gap)
df2.to_csv('after.csv',index=False)

Tags: csvtofalsereadfloatpddf1df2
2条回答

我想这里的问题是, df2["YM"].iloc[i]
因为当您被键入df2["YM"]时,它会从数据帧df2返回YM列。 因此,这意味着您正试图通过键入df2["YM"].iloc[i]从列中获取列。
试试看,df2.iloc[i]

问题如下

 filt = (df1['YM'] == ym )& (df1['REPKCode'] == kcode) & (df1['FamilyNameE'] == fn))
 gap = df1[filt]['Actual']

filt的值将为1或0,因为您正在检查多个条件

 (df1['YM'] == ym )& (df1['REPKCode'] == kcode) & (df1['FamilyNameE'] == fn))

如果上述条件为真,filt将被指定为1,否则为0

所以你的条件是真的,filt==1

现在进入下一行

 gap = df1[filt]['Actual']

你真的在这么做吗

 gap = df1[1]['Actual']

它试图在df1数据帧中找到列“1”,因为没有列作为“1”,这就是它给您错误的原因


编辑

回复您的评论-我如何在df1中获得与“YM”、“REPKCode”、“familyName”匹配的“实际”值?

为此,你需要写在下面几行

gap =  df1[ df1['YM'] == ym ][ df1['REPKCode'] == kcode][ df1['FamilyNameE'] == fn]['Actual']

并删除下面的行

 filt = (df1['YM'] == ym )& (df1['REPKCode'] == kcode) & (df1['FamilyNameE'] == fn))
 gap = df1[filt]['Actual']

相关问题 更多 >

    热门问题