Возьмите несколько списков в dataframe
Как взять несколько списков и поместить их в разные столбцы в фрейме данных Python? Я попробовал это решение, но у меня возникли проблемы.
Попытка 1:
- Иметь три списка, и сжать их вместе и использовать, что
res = zip(lst1,lst2,lst3)
- Дает только один столбец
Попытка 2:
percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
'lst2Tite' : [lst2],
'lst3Tite' : [lst3] },
columns=['lst1Tite','lst1Tite', 'lst1Tite'])
- выдает либо одну строку на 3 столбца (как указано выше), либо, если я переставляю, это 3 строки и 1 столбец
Как получить 100 строк (длина каждого независимого списка) по 3 столбцам (три списка) pandas dataframe?
Ответы
Ответ 1
Я думаю, что вы почти у цели, попробуйте убрать лишние квадратные скобки вокруг lst
(также вам не нужно указывать имена столбцов, когда вы создаете фрейм данных из таких слов):
import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
percentile_list = pd.DataFrame(
{'lst1Title': lst1,
'lst2Title': lst2,
'lst3Title': lst3
})
percentile_list
lst1Title lst2Title lst3Title
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
...
Если вам нужно более производительное решение, вы можете использовать np.column_stack
а не zip
как в первой попытке, в этом примере это примерно в 2 раза больше ускорения, однако, на мой взгляд, это требует затрат на удобочитаемость:
import numpy as np
percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]),
columns=['lst1Title', 'lst2Title', 'lst3Title'])
Ответ 2
Добавление в Aditya Guru здесь. Нет необходимости использовать карту. Вы можете сделать это просто:
pd.DataFrame(list(zip(lst1, lst2, lst3)))
Это приведет к тому, что имена столбцов будут равны 0,1,2. Чтобы задать собственные имена столбцов, вы можете передать аргумент ключевого слова columns
методу выше.
pd.DataFrame(list(zip(lst1, lst2, lst3)),
columns=['lst1_title','lst2_title', 'lst3_title'])
Ответ 3
Просто добавив, что с использованием первого подхода это можно сделать как -
pd.DataFrame(list(map(list, zip(lst1,lst2,lst3))))
Ответ 4
Добавление еще одного масштабируемого решения.
lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)
Ответ 5
Добавляя ответы выше, мы можем создавать на лету
df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)
Надеюсь, поможет !
Ответ 6
@oopsi использовал pd.concat()
, но не включал имена столбцов. Вы могли бы сделать следующее, что, в отличие от первого решения в принятом ответе, дает вам контроль над порядком столбцов (избегая различий, которые неупорядочены):
import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
s1=pd.Series(lst1,name='lst1Title')
s2=pd.Series(lst2,name='lst2Title')
s3=pd.Series(lst3,name='lst3Title')
percentile_list = pd.concat([s1,s3,s3], axis=1)
percentile_list
Out[32]:
lst1Title lst3Title lst3Title
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8
...