使用:Python3.6,Pandas 0.22
寻找能引导我朝正确方向前进的任何提示或文档。
我有一个DataFrame,它根据月份和位置计算降雪的平均值。该文件有两年,2016年和2017年。我试图了解我编写的代码是否能够写入两个不同的文件,一个用于2016年,一个用于2017年。
df = pd.read_csv("Data.csv")
df['DATE'] = pd.DatetimeIndex(df['DATE'], format='%M/%D/%Y')
df['Year'] = df['DATE'].dt.year
df['Month'] = df['DATE'].dt.month
df['Day'] = df['DATE'].dt.day
(df
.assign(MONTH=df['DATE'].dt.strftime('(%m) %B (%y)'))
.groupby(['NAME', 'MONTH', 'Year'], as_index=False)['SNOW']
.agg({'AVERAGE': 'mean'})
)
我尝试了许多不同的方法,将DF放在这些循环的内部和外部:
if 'Year' == '2016':
df = pd.to_csv('average2016.csv', index=False)
else:
df = pd.to_csv('average2017.csv', index=False)
和
if df.loc[df['Year'] == 2016]:
df = pd.to_csv('average2016.csv', index=False)
else:
df = pd.to_csv('average2017.csv', index=False)
我也尝试过使用pd.Series,但似乎你不能使用df.assign吗?
df = pd.Series(['1/1/2016'])
if df.item():
我也尝试过循环,使用日期范围,但他们只是跳过条件并将所有日期写入一个文件。
答案 0 :(得分:2)
df1 = df.loc[df['Year'] == 2016]
df1.to_csv('average2016.csv', index=False)
df2 = df.loc[df['Year'] == 2017]
df2.to_csv('average2017.csv', index=False)
对于一般解决方案,请使用groupby
:
df.groupby('Year').apply(lambda x: x.to_csv('average{}.csv'.format(x.name), index=False))
答案 1 :(得分:0)
以下是一个示例,您可以通过使用dt.year
import pandas as pd
df = pd.DataFrame(dict(date=pd.date_range(start="2017-12-28",end="2018-01-04")))
for ind, dfx in df.groupby(df['date'].dt.year):
dfx.to_csv('average{}.csv'.format(ind), index=False)
数据帧:
date
0 2017-12-28
1 2017-12-29
2 2017-12-30
3 2017-12-31
4 2018-01-01
5 2018-01-02
6 2018-01-03
7 2018-01-04
成为两个文件,average2017.csv
和average2018.csv
:
date date
2017-12-28 2018-01-01
2017-12-29 2018-01-02
2017-12-30 2018-01-03
2017-12-31 2018-01-04