我有一个非常大的csv文件,所以我无法将它们全部读入内存.我只想阅读并处理其中的几行.所以我在Pandas中寻找一个可以处理这个任务的函数,基本的python可以很好地处理这个:
with open('abc.csv') as f:
line = f.readline()
# pass until it reaches a particular line number....
Run Code Online (Sandbox Code Playgroud)
但是,如果我在熊猫中这样做,我总是阅读第一行:
datainput1 = pd.read_csv('matrix.txt',sep=',', header = None, nrows = 1 )
datainput2 = pd.read_csv('matrix.txt',sep=',', header = None, nrows = 1 )
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些更简单的方法来处理熊猫中的这个任务.例如,如果我想读取1000到2000的行.我该如何快速完成?
我想使用pandas,因为我想将数据读入数据帧.
我有一个文件file1.json,其内容如下(每个字典在单独的行中):
{"a":1,"b":2}
{"c":3,"d":4}
{"e":9,"f":6}
.
.
.
{"u":31,"v":23}
{"w":87,"x":46}
{"y":98,"z":68}
Run Code Online (Sandbox Code Playgroud)
我想将此文件加载到 pandas 数据框中,所以这就是我所做的:
df = pd.read_json('../Dataset/file1.json', orient='columns', lines=True, chunksize=10)
Run Code Online (Sandbox Code Playgroud)
但这不是返回数据帧而是返回 JSONReader。
[IN]: df
[OUT]: <pandas.io.json.json.JsonReader at 0x7f873465bd30>
Run Code Online (Sandbox Code Playgroud)
这是正常现象,还是我做错了什么?如果这就是当单个 json 文件中有多个字典(没有任何逗号分隔)并且每个字典在单独的行中时 read_json() 应该如何表现,那么我如何才能最好地将它们放入数据帧中?
编辑:如果我chunksize从 read_json() 中删除参数,这就是我得到的:
[IN]: df = pd.read_json('../Dataset/file1.json', orient='columns', lines=True)
[OUT]: ValueError: Expected object or value
Run Code Online (Sandbox Code Playgroud) 来自https://pypi.org/project/tqdm/:
import pandas as pd
import numpy as np
from tqdm import tqdm
df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))
tqdm.pandas(desc="my bar!")p`
df.progress_apply(lambda x: x**2)
Run Code Online (Sandbox Code Playgroud)
我接受了这段代码并对其进行了编辑,以便从load_excel创建一个DataFrame而不是使用随机数:
import pandas as pd
from tqdm import tqdm
import numpy as np
filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x**2)
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,所以我将df.progress_apply更改为:
df.progress_apply(lambda x: x)
Run Code Online (Sandbox Code Playgroud)
这是最终代码:
import pandas as pd
from tqdm import tqdm
import numpy as np
filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x)
Run Code Online (Sandbox Code Playgroud)
这会产生一个进度条,但实际上并没有显示任何进度,而是加载进度条,并且当操作完成时,它会跳到100%,无法达到目的。
我的问题是:如何使进度条起作用?
progress_apply内部的函数实际上是做什么的?
有没有更好的方法?也许是tqdm的替代品?
任何帮助是极大的赞赏。
我正在尝试从 Jupyter Notebook (Python) 中的 .csv 文件读取数据
.csv文件大小8.5G,7000万行,30列
当我尝试读取 .csv 时,出现错误。
下面是我的代码
import pandas as pd
log = pd.read_csv('log_20100424.csv', engine = 'python')
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用 pyarrow,但它不起作用。
import pandas as pd
from pyarrow import csv`
log = csv.read('log_20100424.csv').to_pandas()
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如何在 Jupyter Notebook 中读取巨大(8.5G).csv 文件
还有其他方法可以读取巨大的 .csv 文件吗?
我的笔记本电脑有 8GB RAM,运行 64 位 Windows 10,i5-8265U 1.6Ghz。
我试图从http://grouplens.org/datasets/movielens/20m/读取名为ratings.csv的.csv文件,该文件在我的计算机中为533.4MB.
这是我在jupyter笔记本中写的内容
import pandas as pd
ratings = pd.read_cv('./movielens/ratings.csv', sep=',')
Run Code Online (Sandbox Code Playgroud)
这里的问题是内核会中断或死亡并要求我重新启动并且它会不断重复.没有任何错误.请问你可以建议任何解决这个问题的方法,就好像我的电脑无法运行它.
这有效,但它会继续重写
chunksize = 20000
for ratings in pd.read_csv('./movielens/ratings.csv', chunksize=chunksize):
ratings.append(ratings)
ratings.head()
Run Code Online (Sandbox Code Playgroud)
只有最后一个块写入其他块被注销
我有一个非常大的 csv 文件millions of rows和一个我需要的行号列表。
rownumberList = [1,2,5,6,8,9,20,22]
Run Code Online (Sandbox Code Playgroud)
我知道有一种叫做skiprows可以帮助跳过几行的reading csv file东西
df = pd.read_csv('myfile.csv',skiprows = skiplist)
#skiplist would contain the total row list deducts rownumberList
Run Code Online (Sandbox Code Playgroud)
但是,由于 csv 文件非常大,直接选择我需要的行可能会更有效率。所以我想知道select rows使用时有什么方法read_csv吗?之后不要尝试选择行dataframe,因为我尽量减少读取文件的时间。谢谢。