В моем фрейме данных есть 6 столбцов дат, которые я хочу, чтобы они были в 1 столбце. ИЗОБРАЖЕНИЕ КАДРА ДАННЫХ ЗДЕСЬ
Код для создания другого столбца приведен ниже.
df['Mega'] = df['Mega'].append(df['RsWeeks','RsMonths','RsDays','PsWeeks','PsMonths','PsDays'])
я новичок в python и pandas, я хотел бы узнать больше, поэтому, пожалуйста, укажите мне источники, так как я действительно плохо разбираюсь в отладке, поскольку у меня нет опыта программирования.
мне нужен список дат в каждой ячейке, так как позже я хочу их отфильтровать, поэтому я хочу, чтобы все даты в 6 столбцах были объединены в 1 большой столбец, чтобы применить фильтр.
Вы можете использовать pd.melt()
, который делает ваш фрейм данных широким и длинным:
df_reshaped = pd.melt(df, id_vars = ['id_1','id_2','id_3'], var_name = 'new_name', value_name = 'Mega')
Разве не нужно добавлять .str
после имен столбцов?
Я всегда использую .astype(str)
, будет ли это работать только с .str
?
Благодаря этому все мои столбцы попадают в одну строку. но моя цель - преобразовать все эти столбцы в независимые строки, чтобы я получил около 24 строк. потому что я хочу позже запустить фильтр в этом мега столбце
Да, это то, что я думал, что вам нужно. Каков ваш идеальный выход?
Хорошо, я знаю, что тебе нужно. У вас есть другие переменные в фрейме данных? что не нужно делать в 1 столбец?
нет, это все, что я хочу преобразовать, остальные столбцы не нужны, которые, я думаю, я могу удалить и просто оставить эти 6 старых и 1 мега новый
попробуйте pd.melt
в ответе выше и дайте мне знать.
после плавления я получаю этот вывод screencast.com/t/IYAq0Bj6g3 это выглядит как удаление столбцов, но цель получить эти столбцы в 1 все еще остается. Пожалуйста, не возражайте, если я спрошу что-то глупое, я только что начал 3 дня назад
можно спросить. Но я думаю, ознакомьтесь с документацией по расплаву, pandas.pydata.org/pandas-docs/stable/reference/api/…, и посмотрите несколько примеров. Я думаю, если вы немного подправите его, вы получите то, что хотите.
Спасибо проверю
Данные:
df = pd.DataFrame({"name" : 'Dav Las Oms'.split(),
'age' : [25, 50, 70]})
df['Name'] = list(['a', 'M', 'm'])
ДФ:
name age Name
0 Dav 25 a
1 Las 50 M
2 Oms 70 m
df = pd.DataFrame(df.astype(str).apply('|'.join, axis=1))
ДФ:
0
0 Dav|25|a
1 Las|50|M
2 Oms|70|m
Документация Pandas — отличный источник хороших примеров. Нажмите здесь, чтобы перейти на страницу с большим количеством примеров и изображений.
Для вашего конкретного случая:
Строим образец DataFrame
:
import pandas as pd
df = pd.DataFrame([
{"RsWeeks": "2015-11-10", "RsMonths": "2016-08-01"},
{"RsWeeks": "2015-11-11", "RsMonths": "2015-12-30"}
])
print("DataFrame preview:")
print(df)
Выход:
DataFrame preview:
RsWeeks RsMonths
0 2015-11-10 2016-08-01
1 2015-11-11 2015-12-30
Мы объединяем столбцы RsWeeks
и RsMonths
, чтобы создать Series
:
my_series = pd.concat([df["RsWeeks"], df["RsMonths"]], ignore_index=True)
print("\nSeries preview:")
print(my_series)
Выход:
Series preview:
0 2015-11-10
1 2015-11-11
2 2016-08-01
3 2015-12-30
Если вам действительно нужно добавить новый Series
в качестве столбца к вашему DataFrame
, вы можете сделать следующее:
df2 = pd.DataFrame({"Mega": my_series})
df = pd.concat([df, df2], axis=1)
print("\nDataFrame preview:")
print(df)
Выход:
DataFrame preview:
RsWeeks RsMonths Mega
0 2015-11-10 2016-08-01 2015-11-10
1 2015-11-11 2015-12-30 2015-11-11
2 NaN NaN 2016-08-01
3 NaN NaN 2015-12-30
Когда вы говорите, что хотите превратить их в один столбец, вы имеете в виду, что вам нужен список дат в каждой ячейке или строка всех дат? Вы хотите, чтобы даты были объектами даты и времени или строками?