Чтение значений в любом из столбцов с чтением нескольких файлов - PullRequest
1 голос
/ 23 октября 2019

Я хотел бы найти значения в столбце 1 или 2 со ссылкой на строку индекса 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 голосов
/ 23 октября 2019

Это работает !!

df['Grade'] = g1 if g1 == g1 else g2
0 голосов
/ 23 октября 2019

Используйте, если имена столбцов являются строками '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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...