创建带有Pandas的空csv文件

ds97pgxw  于 2022-12-09  发布在  其他
关注(0)|答案(5)|浏览(204)

我正在通过一些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)

那么,在上面的代码中,如何在for循环之前创建my_csv.csv呢?
只是一个注意,我知道你可以创建一个数据框,然后保存数据框到csv,但我感兴趣的是,你是否可以跳过这一步。
在上下文方面,我有以下csv文件:

它们各自具有以下结构:

对于每个文件,“天”列最多显示30天。
我想输出一个如下所示的csv文件:

但显然包括了所有月份的所有日子。
我的问题是,我不知道每个分析中包括哪些月份,因此我想使用一个for循环,该循环使用一个包含该信息的列表来访问相关的csv,计算平均温度,然后将其全部保存到一个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
kqlmhetl

kqlmhetl1#

只需在写入模式下打开文件即可创建它。

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)
v2g6jxz6

v2g6jxz62#

创建一个空的csv文件就像下面这样简单

import pandas as pd

pd.DataFrame({}).to_csv("filename.csv")
gwbalxhn

gwbalxhn3#

我会这样做:首先将所有CSV文件(但仅限于您真正需要的列)读入一个DF,然后生成groupby(['Year','Month','Day']).mean()并将生成的DF保存到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')

如果要忽略年份:

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')

一些细节:

(pd.read_csv(f, sep=',', usecols=['Month','Day','AirTemperature']) for f in glob.glob('*.csv'))

将从所有CSV文件生成 Dataframe 元组

pd.concat(...)

将它们连接成一个DF

df.groupby(['Year','Month','Day']).mean()

将生成所需的报告作为 Dataframe ,该 Dataframe 可保存到新的CSV文件中:

.to_csv('my_csv.csv')
9njqaruj

9njqaruj4#

这个问题有点不清楚,但是假设你必须逐月迭代,并按规定应用groupby,只需用途:

#Before loops
 dflist=[]

然后在每个循环中执行以下操作:

dflist.append(MeanDailyTemperaturesForCurrentMonth)

然后在结尾处:

final_df = pd.concat([dflist], axis=1)

这将把所有数据加入一个 Dataframe 。
再看:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html
http://pandas.pydata.org/pandas-docs/stable/merging.html

7nbnzgx9

7nbnzgx95#

您可以这样做来创建一个空的CSV,并添加没有索引列的列。

import pandas as pd
df=pd.DataFrame(columns=["Col1","Col2","Col3"]).to_csv(filename.csv,index=False)

相关问题