读取多个数据时,基于列变量将提取的单元格(iloc)循环到列表中

2022-07-06 11:17:11 发布

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

我想根据新创建的列名进行循环,但在df1['mouse']处出现此错误。append(a.iloc[5,8]):int对象不可下标

import pandas as pd
import numpy as np

dfdata = []
for file in files:
    df1 = pd.read_csv(file, sheetname='sheet1')
    dfdata.append(df1)

df1 = pd.concat(dfdata)
df1['mouse'] = np.empty((len(df1),0)).tolist()
df1['kb'] = np.empty((len(df1),0)).tolist()
df1['monitor'] = np.empty((len(df1),0)).tolist()

for a in df1:
    df1['mouse'].append(a.iloc[5,8])
    df1['kb'].append(a.iloc[6,8])
    df1['monitor'].append(a.iloc[7,8])
    b = {'Mouse':df1['mouse'],'Keyboard':df1['kb'],'Monitor':df1['monitor']}

dfAll = pd.DataFrame(b)

Tags: importforlenkbasnpmonitoremptypddf1appendmousetolistilocdfdata
1条回答
网友
1楼 ·

很抱歉,我还不能对你的问题发表评论,因为我没有足够的声望点数。 于是我写了一个答案

没有真实数据的例子,理解你的问题有点困难

但是,我可以在您的代码中看到一些可能的问题:

如果我是正确的,首先创建3个新列,这样每行中都有一个空列表,如下所示:

   mouse  kb monitor
0    []  []      []
1    []  []      []
2    []  []      []
3    []  []      []
4    []  []      []
5    []  []      []

您可以使用以下代码执行此操作:

df1['mouse'] = np.empty((len(df1),0)).tolist()
df1['kb'] = np.empty((len(df1),0)).tolist()
df1['monitor'] = np.empty((len(df1),0)).tolist()

那么我想你是想用这个来填充新的专栏:

for a in df1:
    df1['mouse'].append(a.iloc[5,8])
    df1['kb'].append(a.iloc[6,8])
    df1['monitor'].append(a.iloc[7,8])
    b = {'Mouse':df1['mouse'],'Keyboard':df1['kb'],'Monitor':df1['monitor']}

一个问题是,当您调用for a in df1:时,您正在迭代df1列的字符串名称。然后调用.iloc,但它无法工作,因为a是一个字符串。 您应该这样做:df1[a].iloc

但是,如果要在列中选择一个值,则不能给出2个索引,因为列只有一个维度,因此应该调用.iloc[i],其中i是列的索引

另外,当您尝试向df1['mouse']添加值时,您正在调用所有列“mouse”上的.append。您还应该定义列的索引,例如df1['mouse'][i],其中i是一个整数

但是,由于您连接了输入数据帧而没有忽略其原始索引,因此这可能是一个问题。因此,您应该尝试像这样连接它们:df1 = pd.concat(dfdata, ignore_index=True)。有关更多信息,请参见此处:pandas documentation

我希望我帮助澄清了一点