gpt4 book ai didi

python - 没有列标题时如何为 pd.read_csv 指定数据类型?

转载 作者:行者123 更新时间:2023-12-05 06:16:31 26 4
gpt4 key购买 nike

我目前正在编写代码来分析大量数据。我已经使用 pandas 读取文本文件并使用 data.head() 打印它。我需要为 9 列(第 9 列为空)指定数据类型,否则该过程会占用太多内存,但我不知道如何为缺少列标题的列指定数据类型。它是否与为列标题指定 dtype 相同?作为引用,我的列数据类型可能如下所示:

第 1 列:混合,因为它包含字母数字字符

第 2 列:YY/MM/DD 格式的日期

第 3 列:以小时/分钟/秒/毫秒为单位的时间

第 4 列:Str

第 5 列:时间

第 6 列:Str

第 7 列:时间

第 8 列:时间

第 9 列:空

Here is an excerpt of the text file

这里也是我的代码的摘录

    import sys
import os
import glob
import pandas as pd
import numpy as np

path = '/Users/MysteriousHo-Oh1231/Downloads/Datapoints1/*.txt'
dataframes = []
for filename in glob.iglob(path):
data = pd.read_csv(filename, header=None, delimiter='\t', dtype={0: object, 1: int, 2: int, 3: object, 4: int, 5: object, 6: int, 7: int, 8: None})
print(data.head())

我试过上面的代码,它返回了这个 error :

请帮我解决这个问题!

最佳答案

定义以下3个转换函数:

def strToDate(tt):
return pd.to_datetime(tt, yearfirst=True)

def strToTime(tt):
return pd.to_datetime(tt, format='%I:%M:%S.%f').time()

def strToTime2(tt):
return pd.Timestamp(float(tt), unit='s').time()

然后读取您的 DataFrame,将它们作为列的转换器传递需要“专门”转换:

df = pd.read_csv('Input.csv', header=None, converters={ 1: strToDate,
2: strToTime, 4: strToTime2, 6: strToTime2, 7: strToTime2 })

当你打印df.info()时,然后:

  • 1 列(日期)是 datetime64[ns] 类型,
  • 8列(NaNs)是float64类型,
  • 所有其他列都是对象类型。

但是不要被误导了。在 Pandas 中,object 的类型实际上意味着“数字或日期时间以外的东西”。

当您检索个人 值时,例如df.iloc[0,2] 你将得到:datetime.time(11, 24, 31, 758000),对于任何单元格都类似来自 467 列,因此它们只是所需的类型。

另一种基于Timedelta的解决方案

将转换器函数定义为:

def strToDate(tt):
return pd.to_datetime(tt, yearfirst=True)

def strToTimeDelta(tt):
return pd.Timedelta(float(tt), unit='S')

读取您的数据框:

df = pd.read_csv('Input.csv', header=None, converters={ 1: strToDate,
2: pd.Timedelta, 4: strToTimeDelta, 6: strToTimeDelta, 7: strToTimeDelta })

(要转换列 2 使用原生 pandasonic 函数 pd.Timedelta)。

然后,如果您需要转换某些 Timedelta 列(例如列 7)到总秒数,包括小数部分,运行:

df[7].dt.seconds + df[7].dt.microseconds / 1e6

但是读取 467 列的默认结果只是float 即秒数。

它们是概念上时间,但实际上:

  • 在输入文件中,它们被保存为文本
  • read_csv 之后,它们是 float ,保持秒数。

那么为什么需要对这些列进行任何转换?

关于python - 没有列标题时如何为 pd.read_csv 指定数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62082597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com