鱼C论坛

 找回密码
 立即注册
查看: 147|回复: 3

[已解决]pandas库求助

[复制链接]
发表于 2024-12-30 21:34:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有没有大佬教教后面程序该怎么写啊,要求见图,目前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[df1['SO2 AQI'].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[df2['City'] == '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()# 计算月均值(有问题)


最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
1735374963964.jpg
1735374963964.jpg

pollution_us_5city_2006_2010_SO2.zip

356.17 KB, 下载次数: 1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[df1['SO2 AQI'].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[df2['City'] == '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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-5 15:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表