Используйте, если имена столбцов являются строками '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)