python - 用字典中的值替换熊猫数据框中的一行
问题描述
我正在尝试通过使用 csv 模块迭代一个大的制表符分隔文件并用这些值替换数据框中的每一行来填充一个空数据框。(在你问之前,是的,我已经尝试了所有普通的 read_csv 方法,但由于 dtype 问题和文件大小,没有任何效果)。
我首先使用 np.empty 创建了一个空的 numpy 数组,使用我的数据维度。然后我将其转换为 pandas DataFrame。然后,我做了以下事情:
with open(input_file) as csvfile:
reader = csv.DictReader(csvfile,delimiter='\t')
row_num = 0
for row in reader:
for key, value in row.items():
df.loc[row_num,key] = value
row_num += 1
这很好用,只是我的文件有 900,000 列,所以速度慢得令人难以置信。这也感觉像是熊猫可以更有效地做的事情,但我一直无法找到如何做。DictReader 给出的每一行的字典如下所示:
{'columnName1':<value>,'columnName2':<value> ...}
这些值是我想在该行的那些列中放入数据框中的值。
谢谢!
解决方案
因此,在这种情况下,您可以做的是构建较小的大 csv 数据文件块。我对 32GB 的 Csv 文件也有同样的问题,所以我不得不构建块。阅读它们后,您可以与它们一起工作。
# read the large csv file with specified chunksize
df_chunk = pd.read_csv(r'../input/data.csv', chunksize=1000000)
chunksize=1000000 设置一次读取多少行
有用的网站:
https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c
推荐阅读
- embedded - 如何解决 atmega128 上的 FreeRTOS 错误?
- uproot - 将 TLorentzVector 信息保存在 DataFrame 中以供将来分析
- asp.net-mvc - 如何向控制器发送参数?
- google-cloud-platform - 使用链接上传 Google Cloud Storage
- android - 我的颤振应用程序在模拟器(启用 vpn)上完美地将文件上传到 firebase,但在我的 android 设备上没有这样做
- wordpress - 在后台使用 wordpress 作为静态网站
- mysql - MySQL数据库中的时间序列数据库
- batch-file - 跨多个文件夹位置更新文件?
- angular - 具有多个嵌套依赖项的 Angular 2 测试服务
- typescript - 在通用路由器中使用枚举