我有一个在线下载的CSV文件。我正试图将它放入Pandas数据帧中。来源是联邦储备银行和使用通货膨胀数据(CPI(。我错过了一些能让它发挥作用的东西。
以下是要下载的URL:
s_url = https://fred.stlouisfed.org/graph/fredgraph.csv?cosd=1990-01-01&coed=2040-01-01&id=CPIAUCSL
我拿着那个URL,读着这个:
response = urlopen(s_url).read()
这给了我一个看起来像这样的东西:
b'DATE,CPIAUCSLn1990-01-01,127.5n1990-02-01,128.0n1990-03-01,128.6n1990-04-01,128.9n1990-05-01,129.1n1990-06-01,129.9n1990-07-01,130.5n1990-08-01,131.6n1990-09-01,132.5n1990-10-01,133.4n1990-11-01,133.7n1990-12-01,134.2n1991-01-01,134.7n1991-02-01,134.8n1991-03-01,134.8n1991-04-01,135.1n1991-05-01,135.6n1991-06-01,136.0n'
然后我试着把这个回应读到Pandas:中
df = pd.read_csv(response)
这行不通。在这个过程中我缺少了哪些步骤?
似乎可以直接使用url作为df参数。你试过了吗?
import pandas as pd
s_url = 'https://fred.stlouisfed.org/graph/fredgraph.csv?cosd=1990-01-01&coed=2040-01-01&id=CPIAUCSL'
df = pd.read_csv(s_url)
您可以使用stringIO从字符串中读取数据。
data = b'DATE,CPIAUCSLn1990-01-01,127.5n1990-02-01,128.0n1990-03-01,128.6n1990-04-01,128.9n1990-05-01,129.1n1990-06-01,129.9n1990-07-01,130.5n1990-08-01,131.6n1990-09-01,132.5n1990-10-01,133.4n1990-11-01,133.7n1990-12-01,134.2n1991-01-01,134.7n1991-02-01,134.8n1991-03-01,134.8n1991-04-01,135.1n1991-05-01,135.6n1991-06-01,136.0n'
from io import StringIO
import pandas as pd
data = data.decode('utf-8') #decode binary string to utf-8
df = pd.read_csv(StringIO(data)) #read the data
df
输出:
DATE CPIAUCSL
0 1990-01-01 127.5
1 1990-02-01 128.0
2 1990-03-01 128.6
3 1990-04-01 128.9
4 1990-05-01 129.1
5 1990-06-01 129.9