我正在通过许多csv文件进行交互,并希望将平均温度附加到空白的csv文件中。如何使用pandas创建一个空的csv文件?
for EachMonth in MonthsInAnalysis:
TheCurrentMonth = pd.read_csv('MonthlyDataSplit/Day/Day%s.csv' % EachMonth)
MeanDailyTemperaturesForCurrentMonth = TheCurrentMonth.groupby('Day')['AirTemperature'].mean().reset_index(name='MeanDailyAirTemperature')
with open('my_csv.csv', 'a') as f:
df.to_csv(f, header=False)
因此,在上面的代码中,如何在my_csv.csv
循环之前创建for
?
我只知道你可以创建一个数据框,然后将数据框保存到csv,但我对你是否可以跳过这一步感兴趣。
就上下文而言,我有以下csv文件:
每个都具有以下结构:
“日”列每个文件最多可读取30天。
我想输出一个如下所示的csv文件:
但显然包括所有月份的所有日子。
我的问题是,我不知道每个分析中包含哪些月份因此我想使用for循环,该循环使用包含该信息的列表来访问相关的csvs,计算平均温度然后将它全部保存到一个csv中。
以文字形式输入:
Unnamed: 0 AirTemperature AirHumidity SoilTemperature SoilMoisture LightIntensity WindSpeed Year Month Day Hour Minute Second TimeStamp MonthCategorical TimeOfDay
6 6 18 84 17 41 40 4 2016 1 1 6 1 1 10106 January Day
7 7 20 88 22 92 31 0 2016 1 1 7 1 1 10107 January Day
8 8 23 1 22 59 3 0 2016 1 1 8 1 1 10108 January Day
9 9 23 3 22 72 41 4 2016 1 1 9 1 1 10109 January Day
10 10 24 63 23 83 85 0 2016 1 1 10 1 1 10110 January Day
11 11 29 73 27 50 1 4 2016 1 1 11 1 1 10111 January Day
答案 0 :(得分:2)
只需在写入模式下打开文件即可创建它。
with open('my_csv.csv', 'w'):
pass
无论如何,我认为你不应该多次打开和关闭文件。你最好打开一次文件,写几次。
with open('my_csv.csv', 'w') as f:
for EachMonth in MonthsInAnalysis:
TheCurrentMonth = pd.read_csv('MonthlyDataSplit/Day/Day%s.csv' % EachMonth)
MeanDailyTemperaturesForCurrentMonth = TheCurrentMonth.groupby('Day')['AirTemperature'].mean().reset_index(name='MeanDailyAirTemperature')
df.to_csv(f, header=False)
答案 1 :(得分:1)
我会这样做:首先将所有CSV文件(但只有你真正需要的列)读入一个DF,然后制作drop3 :: Int -> [a] -> [a]
drop3 n xs = [x | (x, y) <- zip xs [1..], y > n]
并将生成的DF保存到CSV文件中:
@complaints_group = Complaint.group("product_name")
如果想忽略这一年:
@complaints_group = Complaint.select("product_name").group("product_name")
一些细节:
groupby(['Year','Month','Day']).mean()
将从您的所有CSV文件中生成数据帧元组
import glob
import pandas as pd
fmask = 'MonthlyDataSplit/Day/Day*.csv'
df = pd.concat((pd.read_csv(f, sep=',', usecols=['Year','Month','Day','AirTemperature']) for f in glob.glob(fmask)))
df.groupby(['Year','Month','Day']).mean().to_csv('my_csv.csv')
将它们连接成结果单个DF
import glob
import pandas as pd
fmask = 'MonthlyDataSplit/Day/Day*.csv'
df = pd.concat((pd.read_csv(f, sep=',', usecols=['Month','Day','AirTemperature']) for f in glob.glob(fmask)))
df.groupby(['Month','Day']).mean().to_csv('my_csv.csv')
将生成所需报告作为数据框,可将其保存到新的CSV文件中:
(pd.read_csv(f, sep=',', usecols=['Month','Day','AirTemperature']) for f in glob.glob('*.csv'))
答案 2 :(得分:0)
问题有点不清楚,但假设您必须逐月迭代,并按照规定应用groupby,只需使用:
#Before loops
dflist=[]
然后在每个循环中执行以下操作:
dflist.append(MeanDailyTemperaturesForCurrentMonth)
然后在结束时:
final_df = pd.concat([dflist], axis=1)
这会将所有内容合并到一个数据框中。
看看:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html
答案 3 :(得分:0)
创建一个空白的csv文件就像这个
一样简单。import pandas as pd
pd.DataFrame({}).to_csv("filename.csv")