熊猫 - 直接从URL读取大型CSV

时间:2017-11-22 20:32:27

标签: python pandas csv url

我一般都是蟒蛇/数据科学的新手,试图理解为什么以下不起作用:

import pandas as pd
url = 'https://s3.amazonaws.com/nyc-tlc/trip+data/fhv_tripdata_2017-06.csv'
trip_df = []
for chunk in pd.read_csv(url, chunksize=1000, nrows=10000):
    trip_df.append(chunk)
trip_df = pd.concat(trip_df, axis='rows')

它返回了一个MemoryError,但我的印象是以块的形式加载文件是一种解决方法。我不想将csv保存到我的硬盘上,而且我不完全确定这是否会有所帮助。

我的电脑非常有限,只有4GB的RAM(2.9可用)。我认为这是一个因素,但如果导入整个文件不是一个选项,我怎么才能获得它的一部分,比如5000行?

3 个答案:

答案 0 :(得分:0)

试试这个:

reader = pd.read_csv(url, chunksize=1000, nrows=10000)
df = pd.concat([x for x in reader], ignore_index=True)
  

我怎么才能得到它的一部分,比如5000行?

df = pd.read_csv(url, nrows=5000)

答案 1 :(得分:0)

使用

在命令行中获取5000行
wget -q -O - https://s3.amazonaws.com/nyc-tlc/trip+data/fhv_tripdata_2017-06.csv | head -n 5000 > tmp.csv

然后继续使用tmp.csv

答案 2 :(得分:0)

这对我有用

with contextlib.closing(urllib.request.urlopen(url=url)) as rd:
    for df in pd.read_csv(rd, chunksize=5, index_col=0):
        print(df)

虽然只是

pd.read_csv(url, chunksize=5, index_col=0)

因 MemoryError 而崩溃。