我想参考索引行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
答案 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