python – 在read_csv中跳过缺少值的行

python – 在read_csv中跳过缺少值的行,第1张

概述我有一个非常大的csv,我需要阅读.为了使这快速和节省RAM使用我使用read_csv并将一些列的dtype设置为np.uint32.问题是某些行缺少值,而pandas使用float来表示这些值. >是否可以简单地跳过缺少值的行?我知道在读完整个文件后我可以这样做,但这意味着我不能在那之前设置dtype,所以会使用太多RAM. >在读取数据期间,是否可以将缺失值转换为我选择的其他值? 如果你能在阅 我有一个非常大的csv,我需要阅读.为了使这快速和节省RAM使用我使用read_csv并将一些列的dtype设置为np.uint32.问题是某些行缺少值,而pandas使用float来表示这些值.

>是否可以简单地跳过缺少值的行?我知道在读完整个文件后我可以这样做,但这意味着我不能在那之前设置dtype,所以会使用太多RAM.
>在读取数据期间,是否可以将缺失值转换为我选择的其他值?

解决方法 如果你能在阅读过程中用Na 0填充NaN,这将是美味的.也许Pandas的git-hub中的功能请求是有序的……

使用转换器功能

但是,目前,您可以定义自己的函数来执行此 *** 作并将其传递给read_csv中的converter参数:

def conv(val):    if val == np.nan:        return 0 # or whatever else you want to represent your NaN with    return valdf = pd.read_csv(file,converters={colWithNaN : conv},dtypes=...)

请注意,转换器采用dict,因此您需要为每个要处理NaN的列指定它.如果很多列受到影响,它可能会有点令人厌烦.您可以指定列名称或数字作为键.

另请注意,这可能会降低read_csv性能,具体取决于转换器功能的处理方式.此外,如果您只有一列需要在读取期间处理NaN,则可以跳过正确的函数定义并使用lambda函数:

df = pd.read_csv(file,converters={colWithNaN : lambda x: 0 if x == np.nan else x},dtypes=...)

阅读大块

你也可以用你缝合在一起的小块来读取文件以获得最终输出.你可以用这种方式做很多事情.这是一个说明性的例子:

result = pd.DataFrame()df = pd.read_csv(file,chunksize=1000)for chunk in df:    chunk.dropna(axis=0,inplace=True) # DropPing all rows with any NaN value    chunk[colToConvert] = chunk[colToConvert].astype(np.uint32)    result = result.append(chunk)del df,chunk

请注意,此方法不严格复制数据.有一段时间,块中的数据存在两次,紧接在result.append语句之后,但只重复了chunksize行,这是一个公平的讨价还价.该方法也可以比使用转换器功能更快.

总结

以上是内存溢出为你收集整理的python – 在read_csv中跳过缺少值的行全部内容,希望文章能够帮你解决python – 在read_csv中跳过缺少值的行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存