如果每行包含不同数量的字段(数量很大),如何正确读取csv文件?

2024-01-14

我有一个来自亚马逊的文本文件,包含以下信息:

 #      user        item     time   rating     review text (the header is added by me for explanation, not in the text file
  disjiad123    TYh23hs9     13160032    5     I love this phone as it is easy to use
  hjf2329ccc    TGjsk123     14423321    3     Suck restaurant

如您所见,数据由空格分隔,并且每行中有不同数量的列。然而,文本内容也是如此。 这是我尝试过的代码:

pd.read_csv(filename, sep = " ", header = None, names = ["user","item","time","rating", "review"], usecols = ["user", "item", "rating"])#I'd like to skip the text review part

并且出现这样的错误:

ValueError: Passed header names mismatches usecols

当我尝试阅读所有列时:

pd.read_csv(filename, sep = " ", header = None)

而这次的错误是:

Error tokenizing data. C error: Expected 229 fields in line 3, saw 320

鉴于评论文本很长,有很多行,为每列添加标题名称的方法如下question https://stackoverflow.com/questions/27020216/import-csv-with-different-number-of-columns-per-row-using-pandas无法工作。

我想知道如果我想保留评论文本并分别跳过它们,如何读取 csv 文件。先感谢您!

EDIT:

这个问题已经被Martin Evans完美解决了。但现在我正在使用另一个具有相似但不同格式的数据集。现在数据的顺序是相反的:

     # review text                          user        item     time   rating      (the header is added by me for explanation, not in the text file
   I love this phone as it is easy to used  isjiad123    TYh23hs9     13160032    5    
  Suck restaurant                           hjf2329ccc    TGjsk123     14423321    3     

您有什么想法可以正确阅读吗?如果有任何帮助,我们将不胜感激!


正如建议的那样,DictReader也可以按如下方式使用来创建行列表。然后可以将其作为框架导入 pandas 中:

import pandas as pd
import csv

rows = []
csv_header = ['user', 'item', 'time', 'rating', 'review']
frame_header = ['user', 'item', 'rating', 'review']

with open('input.csv', 'rb') as f_input:
    for row in csv.DictReader(f_input, delimiter=' ', fieldnames=csv_header[:-1], restkey=csv_header[-1], skipinitialspace=True):
        try:
            rows.append([row['user'], row['item'], row['rating'], ' '.join(row['review'])])
        except KeyError, e:
            rows.append([row['user'], row['item'], row['rating'], ' '])

frame = pd.DataFrame(rows, columns=frame_header)
print frame

这将显示以下内容:

         user      item rating                                  review
0  disjiad123  TYh23hs9      5  I love this phone as it is easy to use
1  hjf2329ccc  TGjsk123      3                         Suck restaurant

如果评论出现在行的开头,则一种方法是反向解析该行,如下所示:

import pandas as pd
import csv


rows = []
frame_header = ['rating', 'time', 'item', 'user', 'review']

with open('input.csv', 'rb') as f_input:
    for row in f_input:
        cols = [col[::-1] for col in row[::-1][2:].split(' ') if len(col)]
        rows.append(cols[:4] + [' '.join(cols[4:][::-1])])

frame = pd.DataFrame(rows, columns=frame_header)
print frame

这将显示:

  rating      time      item        user  \
0      5  13160032  TYh23hs9   isjiad123   
1      3  14423321  TGjsk123  hjf2329ccc   

                                    review  
0  I love this phone as it is easy to used  
1                          Suck restaurant  

row[::-1]用于反转整行的文本,[2:]跳过现在位于行开头的行结尾。然后将每一行按空格分开。然后,列表推导式会重新反转每个拆分条目。最后rows通过获取固定的 5 列条目(现在在开始处)附加到第一个。然后将剩余的条目用空格重新连接在一起并添加为最后一列。

这种方法的好处是,它不依赖于您的输入数据采用完全固定宽度的格式,并且您不必担心所使用的列宽度是否随时间变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果每行包含不同数量的字段(数量很大),如何正确读取csv文件? 的相关文章

  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • 如何将 GAE 中一种 Kind 中的所有实体复制到另一种 Kind 中,而无需显式调用每个属性

    我们如何使用function clone entity 如中所述在 Python 中复制 Google App Engine 数据存储中的实体 而无需在 编译 时知道属性名称 https stackoverflow com question
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • PySpark groupByKey 返回 pyspark.resultiterable.ResultIterable

    我试图找出为什么我的 groupByKey 返回以下内容 0
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何从pandas中的多列计算多列

    我正在尝试使用函数从 pandas 数据框中的多个列计算多个列 该函数采用三个参数 a b 和 c 并返回三个计算值 sum prod 和 quot 在我的 pandas 数据框中 我有三个列 a b 和 c 我想从中计算列 sum pro
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv

随机推荐

  • 从 Google 脚本发送电子邮件时消息被阻止

    我有一份调查表 人们可以提交他们的工作时间 然后通过电子邮件将他们的回复发送给我 然后发送给 CC 的另外两个人 该脚本经我授权发送电子邮件 并且在很长一段时间内一直运行良好 直到几天前 现在我收到所有三封电子邮件的回复 说消息已被阻止 知
  • 无法创建 API 级别 10 的 Android 项目,因为没有可用的兼容主题

    我觉得我一定是忽略了这里的某些东西 我已经下载了API Level 10通过 SDK 管理器的 API 如果我尝试创建一个新项目 我不能 因为只有Holo主题可用 所有主题至少需要API Level 11 我没有其他主题选项 因此 下一步
  • PHP strtotime 对于 UTC 时间返回 false

    我和我的同事从使用 strtotime 的一些单元测试中获得了不同的结果 差异源于这一行 value strtotime 2050 05 01T20 10 29 410Z 在我的机器上 此结果返回以下内容 int 2535048629 而我
  • 使用 jQuery 仅获取特定行中的 值

    我有一个表 id docsTable 其行看起来与此类似 tr td align center td tr
  • 数据解析后重新加载 UICollection 视图

    我正在尝试动态更新 uicollectionview 我用了这个很棒的教程 https stackoverflow com questions 31735228 how to make a simple collection view wi
  • Python中信号处理程序和atexit处理程序的调用

    我有一段Python代码如下 import sys import signal import atexit def release print Release resources def sigHandler signo frame rel
  • 指针有什么意义? [复制]

    这个问题在这里已经有答案了 当我可以声明变量时 C 中的指针有什么意义 什么时候适合使用它们 通过 C 和 C 在向函数传递变量方面的差异 可以更好地理解指针 是的 您可以传递整个变量或仅传递指向它的指针 行话分别是按值或引用 但是 如果变
  • 在 Firebase iOS SDK 中,每次删除子项时都会触发 .childAdded。我怎样才能阻止这个?

    我将一些数据存储在 Firebase 数据库中名为 通知 的节点下 当我将事件观察器添加到 通知 并将事件类型设置为 childAdded 时 每次将子级添加到 通知 节点以及每次从 通知 节点删除子级时 都会调用完成处理程序 首先 我不明
  • 生成器和返回生成器的函数之间的区别

    我正在用生成器调试一些代码并提出这个问题 假设我有一个生成器函数 def f x yield x 和一个返回生成器的函数 def g x return f x 他们肯定会返回相同的东西 在 Python 代码中互换使用它们时会有什么区别吗
  • 使用 SQL 查询或 Laravel SQL 查询生成器创建表/列组合

    我有一个现有的产品变化方案 我想创建每个生产时间 数量和变化选项的组合 我将通过访问产品的数量 生产时间 变化和变化选项来创建选择表单 表组 id title 1 rug 表天数 id group id day 1 1 1 2 1 2 3
  • 更新应用程序后应用程序图标没有变化

    收到报告称 更新我们的应用程序后 跳板图标没有更新 需要关闭然后打开设备才能使更改生效 当从实时版本更新到测试版本 通过 iTunes 以及从旧 实时 版本更新到最新实时版本 通过设备上的应用商店 时 会发生这种情况 这种情况并不常见 但我
  • R 中的堆叠条形图再现

    我试图在 R 中重现该图 但没有成功 但更多的岁月里 这是数据 title 2016 phased 2017 phased 2018 phased 2019 fully loaded Pillar 1 minimum requirement
  • hive 查询的简单 oozie 示例?

    我正在尝试将一个简单的工作流程转换为 oozie 我尝试过查看 oozie 的示例 但它们有点令人难以接受 实际上 我想运行查询并将结果输出到文本文件 hive e select from tables gt output txt 我如何将
  • React Native 横向模式仅适用于一页

    在 React Native 中是否可以让应用程序以纵向模式运行 但让一个页面以横向模式运行 我知道在 Xcode 中你必须一开始就选择纵向或横向 所以我对如何使应用程序中除一个页面之外的所有页面都变成纵向有点困惑 在 React Navi
  • 如何让用户输入两次以上?

    我是 C 新手 我试图了解如何利用 C 通用输入 cin 我正在尝试编写一个程序来检查句子的字符数量和输入句子中的元音数量 我已经成功完成了这一任务 但是当我尝试让代码再次运行一次时 出现了问题 当它再运行一次时 就不再允许第二次输入 我的
  • Python 中的静态方法和实例方法[重复]

    这个问题在这里已经有答案了 我可以将 Python 方法同时定义为静态方法和实例方法吗 就像是 class C object staticmethod def a self arg1 if self blah blah 这样我就可以同时调用
  • 记录 WCF 接口的最佳方式? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 因此 我正在使用 WCF 并且想要记录我的接口和服务 以便提供给另一家公司的内部应用程序 记录这些接口的最佳方法是什么 我更喜欢将文档与代码内联
  • Android 中的圆形按钮

    我想在 Android 程序中创建圆形按钮 我看过如何创建圆角的EditText https stackoverflow com questions 3646415 how to create edittext with rounded c
  • 在 Matplotlib 的条形图上显示负值的问题

    我正在尝试使用 Matplotlib 创建一个包含正值和负值的条形图 但在让负值显示在 Y 轴上时遇到困难 运行代码时 它将正确显示所有正值 以红色标记 但根本不显示负值 相反 我得到了标记为 y1 的字符串的正值的重复项 请参阅下面的图片
  • 如果每行包含不同数量的字段(数量很大),如何正确读取csv文件?

    我有一个来自亚马逊的文本文件 包含以下信息 user item time rating review text the header is added by me for explanation not in the text file d