Один список для df нескольких столбцов

#python #pandas

#python #панды

Вопрос:

Как создать df с 4 столбцами с одним списком, подобным этому:

 ['Dave',  '2008-09-20',  '2020-05-31',  'dave@google.com',  'Steve',  '2009-01-23',  '2020-04-30',  'steve@gmail.com',  'Rob', '2007-02-14',  '2020-04-30',  'rob@gmail.com',  'Ryan',  '2010-02-11', '2020-03-10',  'ryan@yahoo.com']
 

я использую этот код, но он не работает:

 import pandas as pd
df=pd.Series(data[0].splitlines()).str.split(',',expand=True).T.set_index(0).T.dropna()
df
 

Комментарии:

1. Что содержат данные?

Ответ №1:

Вы можете использовать numpy для изменения формы массива перед его загрузкой:

 pd.DataFrame(np.array(lst).reshape(-1, 4))

       0           1           2                3
0   Dave  2008-09-20  2020-05-31  dave@google.com
1  Steve  2009-01-23  2020-04-30  steve@gmail.com
2    Rob  2007-02-14  2020-04-30    rob@gmail.com
3   Ryan  2010-02-11  2020-03-10   ryan@yahoo.com
 

Ответ №2:

Попробуйте это:

 import pandas as pd
lst = ['Dave',  '2008-09-20',  '2020-05-31',  'dave@google.com',  'Steve',  '2009-01-23',  '2020-04-30',  'steve@gmail.com',  'Rob', '2007-02-14',  '2020-04-30',  'rob@gmail.com',  'Ryan',  '2010-02-11', '2020-03-10',  'ryan@yahoo.com']
df = pd.DataFrame([lst[i:i 4] for i in range(0,len(lst),4)])
print(df)
 

Вывод

      0           1          2           3
0   Dave    2008-09-20  2020-05-31  dave@google.com
1   Steve   2009-01-23  2020-04-30  steve@gmail.com
2   Rob     2007-02-14  2020-04-30  rob@gmail.com
3   Ryan    2010-02-11  2020-03-10  ryan@yahoo.com
 

Ответ №3:

Я настоятельно рекомендую просто использовать самый простой способ сделать что-то.

 import pandas as pd
arr = ['Dave',  '2008-09-20',  '2020-05-31',  'dave@google.com',  'Steve',  '2009-01-23',  '2020-04-30',  'steve@gmail.com',  'Rob', '2007-02-14',  '2020-04-30',  'rob@gmail.com',  'Ryan',  '2010-02-11', '2020-03-10',  'ryan@yahoo.com']
mat = []
for x in range(0,len(arr),4):
    mat.append(arr[x:x 4])
print(pd.DataFrame(mat))
 

Ответ №4:

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

 import pandas as pd
lst =['Dave',  '2008-09-20',  '2020-05-31',   'dave@google.com',  'Steve',  '2009-01-23',  '2020-04-30',  'steve@gmail.com',  'Rob', '2007-02-14',  '2020-04-30',  'rob@gmail.com',  'Ryan',  '2010-02-11', '2020-03-10',  'ryan@yahoo.com']

row_num = len(lst)//4
cols = ['name','start_date','end_date','email']*row_num
ids = sorted([1,2,3,4]*row_num)

df = pd.DataFrame([ids,cols,lst]).T.pivot(index=0,columns=1)[2]