使用 .CSV 文件时,如何在 Python Pandas 内按每月顺序对月份进行排序?
How to sort Months in Monthly order within Python Pandas when working with .CSV files?
对于每个 NAME/LOCATION,计算每个月的平均降雪量。将结果保存在两个单独的 .csv 文件中(一个用于 2016 年,另一个用于 2017 年),将文件命名为 average2016.csv 和 average2017.csv。
我在 Panadas 中使用 Python 3.8。
我使用以下代码完成了此操作:
import numpy as np
import pandas as pd
df = pd.read_csv('filteredData.csv')
df['DATE'] = pd.to_datetime(df['DATE'])
df['year'] = pd.DatetimeIndex(df['DATE']).year
df16 = df[(df.year == 2016)]
df17 = df[(df.year == 2017)]
df_2016 = df16.groupby(['NAME', 'Month'])['SNOW'].mean().reset_index()
df_2017 = df17.groupby(['NAME', 'Month'])['SNOW'].mean().reset_index()
df_2016[['NAME', 'Month', 'SNOW']].to_csv('average2016.csv')
df_2017[['NAME', 'Month', 'SNOW']].to_csv('average2017.csv')
这张图片显示了我 2016 年的平均成绩。
但是,我遇到的问题是月份不按月顺序排列。我希望他们从 1 月到 12 月去每个地点。示例:我想要名称:ADA 0.7 SE, MI US 月份是五月然后是六月。我怎样才能做到这一点?还有没有办法摆脱第一个编号的列?
您可以 sort
在 DATE 列上。但是你需要记住在你的 groupby 中做 sort=False
,否则它会使用字符串排序在那里排序。此外,您每年的重复代码可以替换为单个 groupby,将 year
添加到分组键。然后您将分别写入不同的文件,index=False
就是您摆脱索引的方式。
import numpy as np
import pandas as pd
df = pd.read_csv('filteredData.csv')
df['DATE'] = pd.to_datetime(df['DATE'])
df['year'] = df['DATE'].dt.year # Datetime has this attribute already
df = df.sort_values(['NAME', 'DATE']) # Output will be in order within each Name
df = (df[df.year.between(2016,2017)] # Only 2016 and 2017
.groupby(['year', 'NAME', 'Month'], sort=False)['SNOW']
.mean().reset_index())
for year,gp in df.groupby('year'): # Write files separately by year
gp[['NAME', 'Month', 'SNOW']].to_csv(f'average{year}.csv', index=False)
对于每个 NAME/LOCATION,计算每个月的平均降雪量。将结果保存在两个单独的 .csv 文件中(一个用于 2016 年,另一个用于 2017 年),将文件命名为 average2016.csv 和 average2017.csv。 我在 Panadas 中使用 Python 3.8。 我使用以下代码完成了此操作:
import numpy as np
import pandas as pd
df = pd.read_csv('filteredData.csv')
df['DATE'] = pd.to_datetime(df['DATE'])
df['year'] = pd.DatetimeIndex(df['DATE']).year
df16 = df[(df.year == 2016)]
df17 = df[(df.year == 2017)]
df_2016 = df16.groupby(['NAME', 'Month'])['SNOW'].mean().reset_index()
df_2017 = df17.groupby(['NAME', 'Month'])['SNOW'].mean().reset_index()
df_2016[['NAME', 'Month', 'SNOW']].to_csv('average2016.csv')
df_2017[['NAME', 'Month', 'SNOW']].to_csv('average2017.csv')
这张图片显示了我 2016 年的平均成绩。
但是,我遇到的问题是月份不按月顺序排列。我希望他们从 1 月到 12 月去每个地点。示例:我想要名称:ADA 0.7 SE, MI US 月份是五月然后是六月。我怎样才能做到这一点?还有没有办法摆脱第一个编号的列?
您可以 sort
在 DATE 列上。但是你需要记住在你的 groupby 中做 sort=False
,否则它会使用字符串排序在那里排序。此外,您每年的重复代码可以替换为单个 groupby,将 year
添加到分组键。然后您将分别写入不同的文件,index=False
就是您摆脱索引的方式。
import numpy as np
import pandas as pd
df = pd.read_csv('filteredData.csv')
df['DATE'] = pd.to_datetime(df['DATE'])
df['year'] = df['DATE'].dt.year # Datetime has this attribute already
df = df.sort_values(['NAME', 'DATE']) # Output will be in order within each Name
df = (df[df.year.between(2016,2017)] # Only 2016 and 2017
.groupby(['year', 'NAME', 'Month'], sort=False)['SNOW']
.mean().reset_index())
for year,gp in df.groupby('year'): # Write files separately by year
gp[['NAME', 'Month', 'SNOW']].to_csv(f'average{year}.csv', index=False)