Python 我的代码中的熊猫到csv有什么问题?

Python 我的代码中的熊猫到csv有什么问题?,python,pandas,numpy,export-to-excel,Python,Pandas,Numpy,Export To Excel,我运行此代码的目的是为了好玩,在迪斯尼乐园中查找模式等待时间: import pandas as pd import numpy as np import matplotlib.pyplot as plt df_pirates_all = pd.read_csv( "https://cdn.touringplans.com/datasets/pirates_of_caribbean_dlr.csv",usecols=['date','datetime','SPOSTM

我运行此代码的目的是为了好玩,在迪斯尼乐园中查找模式等待时间:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_pirates_all = pd.read_csv(
    "https://cdn.touringplans.com/datasets/pirates_of_caribbean_dlr.csv",usecols=['date','datetime','SPOSTMIN'],
    parse_dates=['date', 'datetime'], 
)
df_pirates_all['ride'] = 'pirates'
df_pirates_all['open'] = ~((df_pirates_all['SPOSTMIN'] == -999))

df_pirates = df_pirates_all.set_index('datetime').sort_index()
df_pirates = df_pirates.loc['2017-01-01 06:00':'2017-02-01 00:00']
df_pirates = df_pirates.resample('15Min').ffill()


df_star_tours_all = pd.read_csv(
    "https://cdn.touringplans.com/datasets/star_tours_dlr.csv", usecols=['date','datetime','SPOSTMIN'],
    parse_dates=['date', 'datetime']
)
df_star_tours_all['ride'] = 'star_tours'
df_star_tours_all['open'] = ~((df_star_tours_all['SPOSTMIN'] == -999))

df_star_tours = df_star_tours_all.set_index('datetime').sort_index()
df_star_tours = df_star_tours.loc['2017-01-01 06:00':'2017-02-01 00:00']
df_star_tours = df_star_tours.resample('15Min').ffill()

df_space_all = pd.read_csv(
    "https://cdn.touringplans.com/datasets/space_mountain_dlr.csv", usecols=['date','datetime','SPOSTMIN'], 
    parse_dates=['date', 'datetime']
)
df_space_all['ride'] = 'space'
df_space_all['open'] = ~((df_space_all['SPOSTMIN'] == -999))

df_space = df_space_all.set_index('datetime').sort_index()
df_space = df_space.loc['2017-01-01 06:00':'2017-02-01 00:00']
df_space = df_space.resample('15Min').ffill()


all_data = pd.concat([df_pirates, df_star_tours, df_space]).reset_index()
all_data = (
    all_data
        # Drop any "NaN" values in the column 'ride'
        .dropna(subset=['ride', ])
        # Make datetime and ride a "Multi-Index"
        .set_index(['datetime', 'ride'])
        # Choose the column 'SPOSTMIN'
        ['SPOSTMIN']
        # Take the last index ('ride') and rotate to become column names
        .unstack()
)
# print (all_data)

for month, group in all_data.groupby(pd.Grouper(freq='M')):
    with pd.ExcelWriter(f'{month}.xlsx') as writer:
        for day, dfsub in group.groupby(pd.Grouper(freq='D')):
            dfsub.to_excel(writer, sheet_name='day')
然而,我遇到了这个错误

FileCreateError: [Errno 22] Invalid argument: '2017-01-31 00:00:00.xlsx'
并且它连接到dfsub.to_excel行


大多数情况下,注释已经修复,但是,只出现了一张工作表,并且只有数据的最后一天(1-31-17),而不是1-1-17、1-2-17等的单独工作表。

对于基于代码的第一个错误,您不关心具体的日期和时间,因此请执行以下操作:

与pd.ExcelWriter(f'{month.date()}.xlsx'):

这将datetime对象转换为日期对象

第二个错误是,您试图将一个不完全唯一的列作为pandas不允许的索引


也许有一些字段可以合并或使用另一个字段?

修复该字段的原因是更改了源代码

for month, group in all_data.groupby(pd.Grouper(freq='M')):
    with pd.ExcelWriter(f'{month}.xlsx') as writer:
        for day, dfsub in group.groupby(pd.Grouper(freq='D')):
            dfsub.to_excel(writer, sheet_name='day')


根据提出的建议。

该文件名中的某些字符无效,因为它解释了我刚刚查看了结果,当月给了我2017-01-31 00:00:00,我想让它显示为2017.xlsx。任何关于如何获取的想法。如果问题只是如何从
datetime
对象获取这样的字符串,我们不需要查看所有这些内容。请尝试使用
pd.ExcelWriter(f'{month.strftime(“%B%Y”)}.xlsx')
好的。我对其进行了编辑,使其主要处理csv,尽管现在只是将其放在一个月内的个别日期中。尝试过了,现在它只显示数据的最后一天,目标是将个别日期放在单独的表格中,即excel读数2017-01和显示2017-01-01、2017-01-02等表格。
for month, group in all_data.groupby(pd.Grouper(freq='M')):
    with pd.ExcelWriter(f'{month.strftime("%B %Y")}.xlsx') as writer:
        for day, dfsub in group.groupby(pd.Grouper(freq='D')):
            dfsub.to_excel(writer,sheet_name=str(day.date()))