如何将数据转换为 DataFrame

将数据转换为 DataFrame

df = pd.DataFrame(data['list'])
应该怎么改,报错是‘list indices must be integers or slices, not str’

以下是源代码
import requests
import pandas as pd
import matplotlib.pyplot as plt

从网页上获取数据

url = 'http://www.nmc.cn/f/rest/tempchart/58457'
response = requests.get(url)
data = response.json()

将数据转换为 DataFrame

df = pd.DataFrame(data['list'])

将字符串类型的日期转换为日期类型

df['date'] = pd.to_datetime(df['date'])

绘制折线图

plt.plot(df['date'], df['rain'], label='rain')
plt.plot(df['date'], df['temp'], label='temp')
plt.legend()
plt.show()

找出最大最小降雨量的月份

max_rain_month = df.loc[df['rain'].idxmax(), 'date'].strftime('%Y年%m月')
min_rain_month = df.loc[df['rain'].idxmin(), 'date'].strftime('%Y年%m月')
print(f'最大降雨量的月份是{max_rain_month}')
print(f'最小降雨量的月份是{min_rain_month}')

找出最高和最低气温的月份

max_temp_month = df.loc[df['temp'].idxmax(), 'date'].strftime('%Y年%m月')
min_temp_month = df.loc[df['temp'].idxmin(), 'date'].strftime('%Y年%m月')
print(f'最高气温出现在{max_temp_month}')
print(f'最低气温出现在{min_temp_month}')

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答案:

    首先,我们需要使用 requests 库从网站获取数据。然后,使用 json 解码器将数据转换为 Python 字典。接下来,将字典转换为 Pandas DataFrame,并将字符串日期转换为日期类型。最后,我们可以使用 Pandas 的函数进行最大、最小值和数据分析。

    以下是具体的代码:

    import requests
    import pandas as pd
    
    # 获取数据
    url = 'http://www.nmc.cn/f/rest/tempchart/58457'
    response = requests.get(url)
    data = response.json()
    
    # 转换为 Pandas DataFrame
    df = pd.DataFrame(data['data'])
    
    # 将字符串日期转换为日期类型
    df['time'] = pd.to_datetime(df['time'])
    
    # 计算最大/最小降雨量和最高/最低气温的月份
    df['month'] = df['time'].dt.month
    max_temp_month = df.groupby('month')['temp'].max().idxmax()
    min_temp_month = df.groupby('month')['temp'].min().idxmin()
    max_rain_month = df.groupby('month')['rain'].max().idxmax()
    min_rain_month = df.groupby('month')['rain'].min().idxmin()
    
    # 输出结果
    print('最高温度出现在{}月份,最低温度出现在{}月份'.format(max_temp_month, min_temp_month))
    print('最大降雨量出现在{}月份,最小降雨量出现在{}月份'.format(max_rain_month, min_rain_month))
    
    # 绘制折线图
    df.plot(x='time', y=['temp', 'rain'])
    

    请注意,如果出现了“list indices must be integers or slices, not str”的错误,那么说明你尝试在一个列表对象上使用字符串索引。在这种情况下,你需要确定正确的索引方式,并将其用于列表/字典对象。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^