#python #pandas #dataframe
#python #панды #фрейм данных
Вопрос:
Мой код:
for i, out in zip(foo, output):
# doing stuff and conditions
# output = each value in col1
listA.append([i, out])
listA = pd.DataFrame(listA)
0 1
0 [15921, 10, 82, 22, 202973, 368, 1055, 3135, 1... 0
1 [609, 226, 413, 363, 211, 241, 988, 80, 12, 19... 0
2 [22572, 3720, 233, 13, 827, 710, 512, 354, 1, ... 0
3 [345, 656, 25, 2589, 6, 866] 0
4 [29142, 8, 4141, 456, 24] 0
... ... ..
1599995 [256, 8, 80, 110, 25, 152] 4
1599996 [609039, 22, 129, 184, 163, 9419, 769, 358, 10... 4
1599997 [140, 5715, 6540, 294, 1552] 4
1599998 [59, 22771, 189, 387, 4483, 13, 10305, 112231,... 4
1599999 [59, 15833, 200370, 609041, 609042] 4
[1600000 rows x 2 columns]
Как вы можете видеть, каждый список имеет свою собственную длину. Я хочу заполнить каждый массив, чтобы достичь len=118
позиций. Есть ли какой-либо способ с DataFrame()
помощью аргументов сделать это? Кроме того, он складывается в 1 столбец: я хочу, чтобы каждое значение имело свой собственный столбец (т. Е. Всего 118 столбцов 1 output( col1
))
Комментарии:
1. вы хотите заполнить эти массивы случайными числами?
2. @sygneto с
-1
илиNaN
, если возможно, но я проверил ваш ответ, и он работает, добавляя после циклаdf_new.fillna(-1)
. Спасибо!
Ответ №1:
ввод:
data=[
[[15921, 10, 82, 22, 202973, 368, 1055, 3135]],[[15921, 10, 82, 22, 202973, 368, 1055, 3135]]
]
df=pd.DataFrame(data=data)
print(df)
0
0 [15921, 10, 82, 22, 202973, 368, 1055, 3135]
1 [15921, 10, 82, 22, 202973, 368, 1055, 3135]
вывод, из одного столбца в несколько столбцов:
df_new=pd.DataFrame()
for index,row in df.iterrows():
a=np.concatenate(row)
df_new=df_new.append(pd.DataFrame(data=[a]))
print(df_new)
0 1 2 3 4 5 6 7
0 15921 10 82 22 202973 368 1055 3135
0 15921 10 82 22 202973 368 1055 3135
Редактировать:
чтобы сократить время:
df=df.apply(lambda x : x.explode(),axis=1 )
Комментарии:
1. это работает, но мой набор данных содержит 1.600.000 строк, поэтому доступ ко всем из них становится немного медленным. есть ли более быстрое решение?
2. это действительно сработало и быстрее, чем предыдущее решение. Спасибо!!