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

时间:2019-10-16 00:55:50

标签: python pandas

我想基于新创建的列名进行循环,但是在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)

1 个答案:

答案 0 :(得分:0)

抱歉,我无法对您的问题发表评论,因为我的信誉度不足。 因此,我写了一个答案。

没有实际数据的示例,很难理解您的问题。

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

如果我是正确的话,您首先要创建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是该列的索引。 / p>

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

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

我希望我能澄清一下!