Проблема со столбцами в Python, Pandas и Excel ;; - PullRequest
2 голосов
/ 17 июня 2020

Я пытаюсь работать с файлом Excel, используя python и pandas. В этом файле огромное количество столбцов и строк, но я постараюсь упростить, используя этот пример:

Name    Age  Nationality    Name1   Age1    Nationality1    Name2   Age2    Nationality2
Jane    32   Canada                     
Pedro   25   Spain                      
                            Lucas    30      Italy          
                             Ana     23      Germany            
                                                            Pedro    43      Brazil
                                                            Lucas    32      Mexico

Мой пример Excel

Итак, в этом примере , У меня есть столбцы: имя, возраст и национальность. Но у меня также есть Name1, Age1 и Nationality1 .. Поскольку я хочу фильтровать его по его значению, это не сработает, потому что мне придется фильтровать каждое: Name, Name1 и Name2.

Я подумал, что можно было бы преобразовать в разные словари и попытаться отфильтровать эти словари ... но, учитывая количество столбцов и строк, я думаю, это займет гораздо больше времени.

Я также подумал, могу ли я переименовать столбцы, но я искал и увидел, что у него должны быть уникальные имена ... пожалуйста, поправьте меня, если я ошибаюсь.

Есть ли у кого-нибудь решение для этого? было бы очень полезно. заранее спасибо

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы можете использовать bfill(axis=1), чтобы скопировать первое ненулевое значение из каждой строки в каждый предыдущий столбец. В первой итерации l oop все столбцы Name будут успешно заполнены. Если вы установите это в качестве индекса, а затем замените все другие вхождения этих имен в df на NaN, вы можете повторить процесс для остальных столбцов и получить то, что хотите.

import pandas as pd
import numpy as np

df = pd.read_csv('name_age_nationality.csv')

    Name   Age Nationality  Name1  Age1 Nationality1  Name2  Age2 Nationality2
0   Jane  32.0      Canada    NaN   NaN          NaN    NaN   NaN          NaN
1  Pedro  25.0       Spain    NaN   NaN          NaN    NaN   NaN          NaN
2    NaN   NaN         NaN  Lucas  30.0        Italy    NaN   NaN          NaN
3    NaN   NaN         NaN    Ana  23.0      Germany    NaN   NaN          NaN
4    NaN   NaN         NaN    NaN   NaN          NaN  Pedro  43.0       Brazil
5    NaN   NaN         NaN    NaN   NaN          NaN  Lucas  32.0       Mexico

for x in ['Name','Age','Nationality']:
   df = df.bfill(axis=1).set_index(x)
   df = df.replace(df.index.values,np.nan).reset_index()

df[['Name','Age','Nationality']]

Вывод

    Name Age Nationality
0   Jane  32      Canada
1  Pedro  25       Spain
2  Lucas  30       Italy
3    Ana  23     Germany
4  Pedro  43      Brazil
5  Lucas  32      Mexico
0 голосов
/ 17 июня 2020

Вы можете получить все заголовки столбцов в списке. Не могли бы вы более конкретно c, какой конечный результат вы хотите?

list(my_dataframe.columns.values)
...