#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]