当前位置: 首页 > 知识库问答 >
问题:

大熊猫read_csv

彭展
2023-03-14

我正在读取一个包含多个datetime列的csv文件。我需要在读取文件时设置数据类型,但datetimes似乎是个问题。例如:

headers = ['col1', 'col2', 'col3', 'col4']
dtypes = ['datetime', 'datetime', 'str', 'float']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)

运行时出现错误:

不理解数据类型"datetime"

通过pandas在事实之后转换列。to_datetime()不是一个选项,我不知道哪些列将成为datetime对象。这些信息可以更改,并且来自于通知我的数据类型列表的任何信息。

或者,我尝试用numpy.genfromtxt加载csv文件,在该函数中设置dtype,然后转换为pandas.dataframe但它会混淆数据。任何帮助都非常感谢!

共有3个答案

管翼
2023-03-14

您可以尝试传递实际类型而不是字符串。

import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4'] 
dtypes = [datetime, datetime, str, float] 
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)

但是如果没有你的任何数据来修补的话,这将是很难诊断的。

实际上,您可能希望pandas将日期解析为时间戳,因此可能是:

pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=True)
吕冠宇
2023-03-14

有一个parse_dates参数用于read_csv,它允许您定义要视为日期或日期时间的列的名称:

date_cols = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=date_cols)
林魁
2023-03-14

没有为read_csv设置datetime dtype,因为csv文件只能包含字符串、整数和浮点数。

将dtype设置为datetime将使熊猫将datetime解释为对象,这意味着您最终将得到一个字符串。

熊猫。read_csv()函数有一个名为parse_dates

使用此功能,您可以使用默认的date\u解析器dateutil.parser.parser)动态地将字符串、浮点或整数转换为datetime

headers = ['col1', 'col2', 'col3', 'col4']
dtypes = {'col1': 'str', 'col2': 'str', 'col3': 'str', 'col4': 'float'}
parse_dates = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes, parse_dates=parse_dates)

这将导致panda将col1col2作为字符串读取,它们很可能是(“2016-05-05”等),读取字符串后,每列的日期解析器将对该字符串进行处理,并返回函数返回的任何内容。

熊猫。read_csv()函数还有一个名为date\u parser的关键字参数

将此设置为lambda函数将使该特定函数用于解析日期。

你必须给它函数,而不是函数的执行,因此这是正确的

date_parser = pd.datetools.to_datetime

这是不正确的:

date_parser = pd.datetools.to_datetime()

pd。日期工具。to_datetime已重新定位到date\u parser=pd。截止日期时间

感谢@stackoverYC

 类似资料:
  • 我有一个数据帧,如: 所以我想通过两个“for循环”添加一些列,如: 新的类似数据帧的图片: 我的代码不起作用: 如何编写代码来获得像第二张图片这样的数据帧?

  • 问题内容: 我有一个包含屏幕名称,tweet,收藏夹等的Pandas DataFrame。我想找到“ favcount”(我已经做过)的最大值,并返回该“ tweet”的屏幕名称 我似乎找不到任何东西,任何人都可以帮助我朝正确的方向发展吗? 问题答案: 使用 来获取最大价值的指标。那你可以用 编辑: 现已弃用,切换为

  • 问题内容: 我正在使用以下df: 我想在所有年份中强制使用数字: 有没有简单的方法可以做到这一点,还是我必须全部输入? 问题答案: 更新: 您以后不需要转换值,可以在读取CSV时 即时 进行: 如果您需要将多列转换为数字dtypes,请使用以下技术: 样本来源DF: 将选定的列转换为数字dtypes: PS,如果要选择 所有 ()列,请使用以下简单技巧:

  • 问题内容: 我正在做一些地理编码工作,我曾用它来屏幕刮取位置地址所需的xy坐标,我将xls文件导入了panda数据框,并希望使用显式循环来更新没有xy坐标的行,例如下面: 我已经阅读了为什么在遍历熊猫DataFrame之后该功能不能“使用”?并且完全意识到,iterrow仅提供给我们一个视图,而不是一个供编辑的副本,但是如果我真的要逐行更新值怎么办?是否可行? 问题答案: 您从中获得的行是不再连接

  • 查看以下: 问题是它不会在ipython笔记本中按默认值打印所有行,但我必须切片才能查看结果行。即使以下选项也不会更改输出: 有人知道如何显示整个阵列吗?

  • 问题内容: Python 3.4和Pandas 0.15.0 df是一个数据框,而col1是一列。使用下面的代码,我正在检查是否存在值10,并将此类值替换为1000。 这是另一个例子。这次,我将基于索引更改col2中的值。 这两种都会产生以下警告: 最后, 这会产生类似的警告,并带有以下建议: 我不确定我是否理解警告中指出的讨论。编写这三行代码的更好方法是什么? 请注意,该操作有效。 问题答案: