通过读取多个文件来读取任一列中的值

时间:2019-10-23 08:08:47

标签: python pandas dataframe

我想参考索引行2(等级)在第1列或第2列中找到值。
我已经尝试过“与”和“或”,但它不起作用。

我有2个文件:

     0      1     2   
0               
1    Name   john  
2    Grade  6     
3            

     0      1     2   
0               
1    Name   Jack  
2    Grade        8
3             

这是我想要的最终结果:

     Name    Grade     
0     John     6
1     jack     8          
2    

这是我的代码:

for file in files:
       df = pd.read_csv(file,header=0)
       df['Grade'] = df.iat[2,2] and [2,1]
       d.append(df)
df = pd.concat(d,ignore_index=True)

但是我的代码的结果是这样的:

     Name    Grade     
0     John      6
1     Jack              
2    

2 个答案:

答案 0 :(得分:0)

在列名称为字符串'0', '1', '2'时使用:

for file in files:
       df = pd.read_csv(file,header=0)
       df['1'] = df['1'].fillna(df['2'])
       df = df.set_index('0')[['1']].T
       d.append(df)
df = pd.concat(d,ignore_index=True)

如果要处理职位,请使用iloc并选择带有索引的列:

for file in files:
       df = pd.read_csv(file,header=0)
       df.iloc[:, 1] = df.iloc[:, 1].fillna(df.iloc[:, 2])
       df = df.set_index(df.columns[0])[df.columns[1]].T
       d.append(df)
df = pd.concat(d,ignore_index=True)

编辑:

也可以使用DataFrame.iat解决方案,但我认为这不是一般性的方法:

d = []
for file in files:
    df = pd.read_csv(file,header=0)
    n = df.iat[1,1]

    g1 = df.iat[2,1]
    g2 = df.iat[2,2]
    out = {'Name': n, 'Grade': g1 if g1 == g1 else g2}
    d.append(out)

df = pd.DataFrame(d)
print (df)

   Name Grade
0  john     6
1  Jack     8

EDIT1:您可以使用np.nan != np.nan,因此可以使用if-else语句:

for file in files:
       df = pd.read_csv(file,header=0)

       g1 = df.iat[2,1]
       g2 = df.iat[2,2]
       df['Grade'] = g1 if g1 == g1 else g2
       d.append(df)

df = pd.concat(d,ignore_index=True)

答案 1 :(得分:0)

这有效!!

df['Grade'] = g1 if g1 == g1 else g2