如何通过python格式化pandas数据帧以获得csv输出中的列?
我正在编写代码,以便获得餐厅的营业时间: 这是我的输入代码: 输出:如何通过python格式化pandas数据帧以获得csv输出中的列?,python,pandas,Python,Pandas,我正在编写代码,以便获得餐厅的营业时间: 这是我的输入代码: 输出: hours_type is_open_now open 0 REGULAR FALSE [{'start': '1100', 'end': '2200', 'day': 0}, {'start': '1100', 'end': '2200', 'day': 1}, {'start': '1100', 'end': '2200', 'day': 2}, {'start': '1100', 'end': '220
hours_type is_open_now open
0 REGULAR FALSE [{'start': '1100', 'end': '2200', 'day': 0}, {'start': '1100', 'end': '2200', 'day': 1}, {'start': '1100', 'end': '2200', 'day': 2}, {'start': '1100', 'end': '2200', 'day': 3}, {'start': '1100', 'end': '2200', 'day': 4}, {'start': '1100', 'end': '2200', 'day': 5}, {'start': '1100', 'end': '2100', 'day': 6}]
但是,我希望输出像第1列那样:标题应该是'day'
,第2列:'start'
,第3列:'end'
,每列下面应该是各自的值
我在运行代码时也遇到了这个错误:
AssertionError:传递了3列,传递的数据有1列
编辑:添加了我的列表的外观
my_list = [{'open': [{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 0},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 1},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 2},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 3},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 4},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 5},
{'is_overnight': False, 'start': '1100', 'end': '2100', 'day': 6}], 'hours_type': 'REGULAR',
'is_open_now': False}]
for i in my_list[0]["open"]:
del i["is_overnight"]
print(my_list)
我该怎么做?您已经将
merge\u HOO
的结构调整为一个dict,它的键包含列的数据。因为我想你最终会有不止一家餐厅,所以我在我的列表中为每家餐厅添加了一个柜台项目
my_list = [{'open': [{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 0},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 1},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 2},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 3},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 4},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 5},
{'is_overnight': False, 'start': '1100', 'end': '2100', 'day': 6}], 'hours_type': 'REGULAR',
'is_open_now': False}]
merge_HOO = {'item': [], 'day': [], 'start': [], 'end': []}
for i, restaurant in enumerate(my_list):
for item in restaurant['open']:
merge_HOO['item'].append(i)
merge_HOO['day'].append(item['day'])
merge_HOO['start'].append(item['start'])
merge_HOO['end'].append(item['end'])
merge_HOO = pd.DataFrame(merge_HOO,
columns=['item', 'day', 'start', 'end'])
print(merge_HOO)
它会屈服的
item day start end
0 0 0 1100 2200
1 0 1 1100 2200
2 0 2 1100 2200
3 0 3 1100 2200
4 0 4 1100 2200
5 0 5 1100 2200
6 0 6 1100 2100
这就是你想要的吗?你能给我的列表添加一些元素吗??是的,我已经编辑过了,并且提到了同样的@VincenzoLavoriniYes。上帝保佑你@ascripter那么如果你也能给出答案,我会很感激:)有没有办法把它做成一个宽格式,因为这个输出是一个长数据格式?宽格式是指有一天,开始,在一列中结束所有内容,并在其旁边的行中保留值,如第01天2 3 4 5 6,以及类似的其他日期,如开始1100 2200 1100 2200…我不确定您的意思(以及您最终打算如何处理数据)。是否希望每个单元格的条目都是一个列表?然后,您将在csv中得到一系列列表。你确定你有明确的问题吗?
my_list = [{'open': [{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 0},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 1},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 2},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 3},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 4},
{'is_overnight': False, 'start': '1100', 'end': '2200', 'day': 5},
{'is_overnight': False, 'start': '1100', 'end': '2100', 'day': 6}], 'hours_type': 'REGULAR',
'is_open_now': False}]
merge_HOO = {'item': [], 'day': [], 'start': [], 'end': []}
for i, restaurant in enumerate(my_list):
for item in restaurant['open']:
merge_HOO['item'].append(i)
merge_HOO['day'].append(item['day'])
merge_HOO['start'].append(item['start'])
merge_HOO['end'].append(item['end'])
merge_HOO = pd.DataFrame(merge_HOO,
columns=['item', 'day', 'start', 'end'])
print(merge_HOO)
item day start end
0 0 0 1100 2200
1 0 1 1100 2200
2 0 2 1100 2200
3 0 3 1100 2200
4 0 4 1100 2200
5 0 5 1100 2200
6 0 6 1100 2100