leomaster 发表于 2024-12-30 21:34:30

pandas库求助

有没有大佬教教后面程序该怎么写啊,要求见图,目前1-4都写出来了,第5步求月平均值不会,文件里形式见图。
AI用的resample方法但我不知道怎么写关键词。

#库的导入#
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

#读取并查看文件一#
df1 = pd.read_csv("pollution_us_5city_2006_2010_SO2.csv")
print(df1[:4]) #查看前五行,或者print(df.head())#
print(df1.tail(2)) #查看后两行#
df1 = df1.drop(columns=["State Code", "County Code", "Site Num", "Address"])#删除操作#
df1.loc.isnull(), 'SO2 AQI'] = int(df1['SO2 AQI'].mean())#填充均值#
df1.to_excel('pollution_us_5city_2006_2010_SO2.xlsx', index = False)#导出#
#查看文件二#
df2 = pd.read_excel("pollution_us_5city_2006_2010_SO2.xlsx")
ny_df = df2.loc == 'New York', ] #选取#
ny_df.to_csv('pollution_us_NewYork_2006_2010_SO2.txt', sep = ' ', index = False)
#查看文件三#
df3 = pd.read_csv("pollution_us_NewYork_2006_2010_SO2.txt", sep = ' ', parse_dates = ['Date Local'])
date_df3 = df3[(df3['Date Local'] >= '2007-01-01') & (df3['Date Local'] <= '2009-12-31')]
date_df3.to_csv('pollution_us_NewYork_2007_2009_SO2.csv', index=False)
#查看文件四#
df4 = pd.read_csv("pollution_us_NewYork_2007_2009_SO2.csv")
df4['Date Local'] = pd.to_datetime(df4['Date Local'])# 确保Date字段是日期类型
df4.set_index('Date Local', inplace=True)# 设置Date为索引
#monthly_mean = df4.resample('ME').mean()# 计算月均值(有问题)


FishC 发表于 2024-12-30 21:34:50

首先,您在处理pandas数据时,想要计算月平均值,通常可以使用`resample`方法来实现。以下是如何实现该步骤的指导。

假设您的DataFrame以下列形式存在,其中`Date`是日期列,`SO2 AQI`是您要计算平均值的列:

# 加载库
import pandas as pd

# 假设df已经准备好,并且包含'时间戳'或'日期'列作为索引,确保该列为datetime类型
# 示例:df.index = pd.to_datetime(df['Date'])

# 以'M'代表重采样到月
monthly_average = df.resample('M').mean()

# 打印查看每个月的平均值
print(monthly_average)

具体到您的代码中,第5步计算月平均值的代码可以这样写:

# 假设'日期'是您DataFrame中的列名,可以是'日期','Date'或其他与时间相关的列
df3['Date'] = pd.to_datetime(df3['Date'])

# 将'Date'列设为索引
df3.set_index('Date', inplace=True)

# 使用resample方法计算月平均值
monthly_avg = df3.resample('M').mean()

# 显示月平均值
print(monthly_avg)

请确保您的DataFrame中有正确的日期列,并且已经转换为日期时间格式。然后,使用`resample('M')`方法将数据重采样到每月,并计算平均值。

如有任何其他问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

leomaster 发表于 2024-12-30 21:59:28

这是我目前写出的代码,请各位前辈给点意见

#库的导入#
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#读取并查看文件一#
df1 = pd.read_csv("pollution_us_5city_2006_2010_SO2.csv")
print(df1[:4]) #查看前五行,或者print(df.head())#
print(df1.tail(2)) #查看后两行#
df1 = df1.drop(columns=["State Code", "County Code", "Site Num", "Address"])#删除操作#
df1.loc.isnull(), 'SO2 AQI'] = int(df1['SO2 AQI'].mean())#填充均值#
df1.to_excel('pollution_us_5city_2006_2010_SO2.xlsx', index = False)#导出#
#查看文件二#
df2 = pd.read_excel("pollution_us_5city_2006_2010_SO2.xlsx")
ny_df = df2.loc == 'New York', ] #选取#
ny_df.to_csv('pollution_us_NewYork_2006_2010_SO2.txt', sep = ' ', index = False)
#查看文件三#
df3 = pd.read_csv("pollution_us_NewYork_2006_2010_SO2.txt", sep = ' ', parse_dates = ['Date Local'])
date_df3 = df3[(df3['Date Local'] >= '2007-01-01') & (df3['Date Local'] <= '2009-12-31')]
date_df3.to_csv('pollution_us_NewYork_2007_2009_SO2.csv', index=False)
#查看文件四#
df4 = pd.read_csv("pollution_us_NewYork_2007_2009_SO2.csv")
df4['Date Local'] = pd.to_datetime(df4['Date Local'])# 确保Date字段是日期类型
df4.set_index('Date Local', inplace=True)# 设置Date为索引
#查看文件四#
df4 = pd.read_csv("pollution_us_NewYork_2007_2009_SO2.csv")
df4['Date Local'] = pd.to_datetime(df4['Date Local'])# 确保Date字段是日期类型
df4.set_index('Date Local', inplace=True)# 设置Date为索引
_mean = df4.drop(columns=["ID", "State", "County", "City", "SO2 Units", "SO2 1st Max Value", "SO2 1st Max Hour", "SO2 AQI"])
_max = df4.drop(columns=["ID", "State", "County", "City", "SO2 Units", "SO2 1st Max Value", "SO2 Mean", "SO2 AQI"])
_aqi = df4.drop(columns=["ID", "State", "County", "City", "SO2 Units", "SO2 1st Max Value", "SO2 1st Max Hour", "SO2 Mean"])
monthly_mean = _mean.resample('ME').mean()# 计算月均值(有问题)
monthly_max = _max.resample('ME').mean()
monthly_aqi = _aqi.resample('ME').mean()

plt.figure(figsize=(12, 8))
plt.plot(monthly_mean.index, monthly_mean["SO2 Mean"], color="red", label="SO2 Mean")
plt.plot(monthly_max.index, monthly_max["SO2 1st Max Hour"], color="green", label="SO2 1st Max Hour")
plt.plot(monthly_aqi.index, monthly_aqi, color="blue", label="SO2 AQI")
plt.xticks(rotation=90)
plt.xlabel("Year - Month")
plt.ylabel("Value")
plt.title("SO2 Statistics in New York from 2007 to 2009")
plt.legend()
plt.show()

FishC 发表于 2024-12-30 21:59:37

leomaster 发表于 2024-12-30 21:59
#库的导入#
import numpy as np
import pandas as p ...

看起来您在处理数据的过程中遇到了一些问题。以下是对您代码中几个部分的整理和补充,以便您能够计算出纽约市SO2 AQI的月平均值。

### 步骤4. 删除指定的列
df1 = df1.drop(columns=['要删除的列名'])# 替换“要删除的列名”为实际要删除的列的名字

### 步骤5. 填充缺失值
在这里,我们需要对`'SO2 AQI'`列中的缺失值填充均值:
df1['SO2 AQI'].fillna(df1['SO2 AQI'].mean(), inplace=True)

### 后续读取和处理文件
# 查看文件三,注意这里parse_dates应该指向日期列
df3 = pd.read_csv("pollution_us_NewYork_2006_2010_SO2.txt", sep=' ', parse_dates=['日期列名'])# 替换'日期列名'为实际的日期列

# 设置日期列为索引
df3.set_index('日期列名', inplace=True)# 确保日期列作为索引

# 计算月平均值
monthly_avg = df3.resample('M').mean()

# 打印月平均值
print(monthly_avg)

### 注意
1. 将`'日期列名'`替换为您的数据中实际包含日期的列名。
2. 确保日期列数据格式为datetime类型,否则`resample`无法工作。
3. `parse_dates`参数在读取CSV文件时用来自动将指定的列解析为日期格式。

如果您有进一步的问题或者需要更多的帮助,请告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: pandas库求助