这两天掌柜遇到要读取大型(基本都超过1G)的CSV文件到单个DataFrame里面的操作,搜了一下,这里结合自身实际情况做个总结,希望对有同样需求的朋友有帮助!下面直接看案例吧👇
除了一个小于1G的CSV文件,其余都大于1.3G。。。好了,现在掌柜要读取其中一个大型CSV文件到单个DataFrame中,那应该怎么操作呢?
-
第一种:使用chunksize模块。
-
优点
:步骤简单,且对内存相当足(>=16G)的电脑适用。
-
缺点
:如果你的电脑/云/服务器内存不足以支撑这些大型文件(
比如你的内存只有2G,但是文件 >= 4G的情况下
),
同样会出现Memory error(内存泄漏)
。
-
具体方法:
import pandas as pd
import numpy as np
df_chunk = pd.read_csv('YourFileName.csv', chunksize=1000000, iterator = True)
chunk_list = []
for chunk in df_chunk:
chunk_list.append(chunk)
df_concat = pd.concat(chunk_list)
df_concat.shape
整合后的DataFrame大小如下:
(其实这还是掌柜选取最小一个文件读出来的数据。。。可见其他文件都是大于1000万行的😂)
import pandas as pd
import numpy as np
MAX_ROWS = XXX
df = pd.read_csv('YourFileName.csv', nrows = MAX_ROWS)
df.info()
......
df = pd.read_csv('YourFileName.csv', dtype = {
'column_1': np.uint16,
'column_2': np.float32,
'column_3': np.float32,
'column_4': np.float32,
'column_5': np.uint8,
df.info()
- 第三种:只读取可能有用的部分特征列到DataFrame中。
- 优点:省内存,步骤简单。
- 缺点:需要先对整个数据集提取小部分行数进行一个整体的分析,最后才能知道哪些特征是有用的。
- 具体方法:
import pandas as pd
df = pd.read_csv('YourFileName.csv', nrows = 100000)
df.info()
......
use_cols = ['column_1', 'column_2', 'column_3', 'column_4', 'column_5']
unused_cols = ['column_6', 'column_7']
df = pd.read_csv('YourFileName.csv', usecols=use_cols)
df.info()
- 第四种:使用并行计算库Dask。(推荐使用)
- 优点:能在集群中进行分布式计算,方便快捷高效。
- 缺点:对新手来说,虽然需要花点时间去熟悉Dask的使用方法,建议参考官方文档,但不是很难。
- 具体方法:
import dask.dataframe as dd
df = dd.read_csv('YourFileName.csv')
df.head()
下面是掌柜使用Dask读取了1.3G的CSV文件后的一个运行时间:
可以看出来Dask的计算效率是很不错的,只用了17.1ms就读取了1.3G+的CSV文件;而且掌柜这还是在内存只有2G的云服务器上面操作的,并没有发生(由Memory Error造成的)Kernel died的情况。
好了,主要的四种方法掌柜已经在这里分享了,大家按自己的需求来选取使用😁。如果你有更好的方法,欢迎在下面评论,谢谢。
参考资料:
3 simple ways to handle large data with Pandas
Tutorial: Using Pandas with Large Data Sets in Python
Dask官方文档
这两天掌柜遇到要一次读取多个大型(都基本超过1G)的CSV文件到单个DataFrame里面的操作,这里做个总结,希望对有同样需求的朋友有帮助!下面直接看案例吧????除了一个小于1G的csv文件,其余都大于1.3G????。。。好了,现在掌柜要一次读取这10个大型csv文件到DataFrame中。第一种:使用chunksize模块。...
print(chunk.tail(10))
以上这篇python读取几个G的csv文件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
您可能感兴趣的文章:python读csv文件时指定行为表头或无表头的方法Python把对应格
首先使用office打不开
然后在python中使用基本的pandas.read_csv打开文件时:MemoryError
最后查阅read_csv文档发现可以分块读取。
read_csv中有个参数chunksize,通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader,IO
CSV文件打开以及乱码问题
今天要使用一个csv文件,但是有8个G,excel打不开,用Python的pandas也读不了,可能是我电脑配置太落后,也可能是数据实在太大了。
解决办法:首先处理打不开的问题,我们可以把大的csv分割成若干小文件,使用文件分割器,按10000行一个文件分割,分割器在F:\新建文件夹\csv文件分割器\split.exe,稍等一段时间就行。我还试过另一个分割器,但是不行...
python 读取文件夹下所有 csv xls xlsx文件 并简单清洗数据 保存到 dataframe 中
没有的话直接pip下载就行
pip install pandas
pip install os
data_train 即为所有文件数据
postgresql数据库读取大容量sql文件
1.问题描述
postgre数据库有一个管理网页,点击大象图形图标(pgAdmin 4)即可打开。在网页端可以打开一定大小的sql文件。当文件很大时,打不开时,我们则可以通过控制台的方式读取文件。
1.1 网页读取sql文件方法
1.选择对应的模式
2.右键选择Query Tool查询工具
3.点击文件图案的图标,可打开文件选择器,选择你需要执行的sql文件即可
2.前提工作
通过控制台进入到你所指定的数据库下:
1.搜索psql,找到SQL Shell
如果一个csv文件过大,比如说达到好几G,直接读取的话内存估计hold不住,幸好pandas支持使用chunksize指定行数,每次按多少行多少行来读取,这样就避免了一次性读取过多数据导致内存崩溃。
用row["某个列的名称"] 即可读取该列的对应数据了,之后就可以进行数据处理了。
import pandas as pd
chunksize = 1000
count = 1
for df in pd.read_csv('1.txt',chunksize=chunksize):
print(cou
<h3>回答1:</h3><br/>在Python Pandas中,我们可以用“pd.read_csv()”方法来读取CSV文件,并将其转换为DataFrame格式。要批量读取CSV文件,我们可以使用Python的os库和glob库。
首先,我们需要导入需要使用的库:
import pandas as pd
import os
import glob
接下来,设置CSV文件路径和通配符:
path = 'C:/Users/User/CSVFiles/*.csv'
这里的“*”代表所有符合条件的CSV文件,路径可以根据需要进行修改。
然后,我们可以使用glob库的“glob()”方法来查找所有符合条件的CSV文件:
all_files = glob.glob(path)
通过循环,我们可以逐个读取CSV文件,并将它们按顺序合并为一个DataFrame:
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
在这个循环中,我们首先用“pd.read_csv()”方法读取CSV文件,并将它们存储到一个列表中。最后,使用“pd.concat()”方法将所有DataFrame合并为一个。
通过这种方法,我们可以方便地批量读取CSV文件,并将它们转换为Pandas DataFrame。
<h3>回答2:</h3><br/>Python是一种很流行的编程语言,而Pandas是Python中的一种常用数据处理库。Pandas中的DataFrame是一个非常重要的数据结构,使用它可以轻松地处理和分析数据。
很多时候,我们需要批量读取多个CSV文件到DataFrame中进行处理。这时候,可以使用Pandas中的read_csv函数。下面,我们来介绍如何使用Pandas批量读取CSV文件到DataFrame中。
第一步是导入需要使用的Python库,即Pandas库:
import pandas as pd
import os
然后,我们需要定义一个函数来批量读取CSV文件。这个函数接受两个参数:文件夹路径和文件名前缀。在这个函数中,我们首先使用os库中的listdir函数获取文件夹中所有符合条件的文件名(即以指定前缀开头的文件),然后逐个读取这些CSV文件并将它们存储为一个DataFrame。最后,将这些DataFrame合并为一个大的DataFrame并返回它。
def read_csv_files(folder_path, file_prefix):
files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.startswith(file_prefix)]
df_list = []
for file in files:
df = pd.read_csv(file)
df_list.append(df)
df_all = pd.concat(df_list, ignore_index=True)
return df_all
使用这个函数读取多个CSV文件非常方便。只需要使用下面的代码即可:
df = read_csv_files('/path/to/csv/folder', 'prefix_')
这里,/path/to/csv/folder是存储CSV文件的文件夹路径,prefix_是CSV文件名的前缀。使用这个函数,可以读取所有以prefix_开头的CSV文件,并将它们合并为一个大的DataFrame。
通过上述方法,可轻松批量读取CSV文件到DataFrame中,这样可以方便地进行后续的数据处理和分析。
<h3>回答3:</h3><br/>Python pandas是一款非常流行的数据分析库,可以非常方便地读取和处理各种数据格式,其中包含了一些非常实用的方法,例如批量读取CSV文件到Dataframe的方法。下面将详细介绍这种方法。
pandas主要提供了两个方法,用于批量读取CSV文件到Dataframe: pd.concat() 和pd.read_csv()。其中pd.concat()方法可以将多个Dataframe连接起来,然后再次赋值给同一个Dataframe,实现批量读取CSV文件。
首先,我们需要引入pandas库并设置工作目录:
```python
import pandas as pd
import os
os.chdir("your_folder_path")
接下来,我们需要获取所有CSV文件的文件名列表:
```python
all_files = os.listdir("your_folder_path")
csv_files = [f for f in all_files if f.endswith('.csv')]
然后我们需要将所有CSV文件读取到Dataframe中,并将它们连接起来:
```python
df_from_each_file = (pd.read_csv(f) for f in csv_files)
df = pd.concat(df_from_each_file, axis=0, ignore_index=True)
这将使用一个for循环从文件列表中逐个迭代读取所有CSV文件的内容,使用pd.read_csv()指令以Dataframe的形式读取每个文件的内容。最后,我们使用pd.concat()将所有读取到的Dataframe连接起来,使用ignore_index=True指令可以避免出现来自多个CSV文件的相同行索引。
最后,我们可以对合并后的Dataframe进行数据清理、转换和整理,实现我们需要的功能。
综上所述,以下是批量读取CSV文件到Dataframe的方法的完整代码示例:
```python
import pandas as pd
import os
os.chdir("your_folder_path")
all_files = os.listdir("your_folder_path")
csv_files = [f for f in all_files if f.endswith('.csv')]
df_from_each_file = (pd.read_csv(f) for f in csv_files)
df = pd.concat(df_from_each_file, axis=0, ignore_index=True)
# 数据清理、转换和整理
# ...
# 输出处理的Dataframe
print(df.head())
在实际操作过程中,我们需要根据需要调用合适的库和函数,对CSV文件进行必要的处理。在这个过程中,Pandas的强大功能确实帮助我们大大简化了处理大量CSV文件的过程。
如何解决报错ValueError: Input contains NaN, infinity or a value too large for dtype('float64')的问题
59259
Jupyter notebook读取大型csv文件遇到The kernel appears to have died. It will restart automatically的错误原因排查
m0_59152341: