微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-如何使用熊猫完全忽略csv中的空格

我正在尝试将.csv文件制作成既易于阅读又易于熊猫阅读的格式.这意味着列应该整齐地分开,以便您可以轻松识别每个值所属的列.问题是,用空格填充它会降低熊猫功能.到目前为止,我所拥有的是

work    ,roughness  ,unstab ,corr_c_w   ,u_star ,c_star
us      ,True       ,True   ,-0.39      ,0.35   ,-.99
wang    ,False      ,       ,-0.5       ,       ,
cheng   ,           ,True   ,           ,       ,
watanabe,           ,       ,           ,0.15   ,-.80

如果我取出上述.csv上的所有空格,然后直接使用pd.read_csv读取它,则效果很好.前两列为布尔值,其他为浮点数.但是,如果没有空格,则根本无法阅读.当我阅读上面的.csv

pd.read_csv('bibrev.csv', index_col=0)

这是行不通的,因为显然所有的列和字符串都包含空格.当我使用

pd.read_csv('bibrev.csv', index_col=0, skipinitialspace=True)

那么这是可行的,因为浮点数被读取为浮点数,而缺失值被读取为NaN,这是一个很大的改进.但是,列名和布尔列仍然是带空格的字符串.

有什么方法可以直接通过熊猫读取.csv吗?还是可能会有点csv格式,并且仍然可以被人可读的.csv清晰阅读?

PS .:我试图避免使用python作为字符串读取所有内容,替换空白,然后将其提供给pandas,并且还尝试避免定义某些函数,并通过converters关键字将其传递给pandas.

解决方法:

尝试这个:

import pandas as pd

def booleator(col):
    if str(col).lower() in ['true', 'yes']:
        return True
    #elif str(col).lower() == "false":
    #    return False
    else:
        return False

df = pd.read_csv('data.csv', sep='\s*,\s*', index_col=0,
                 converters={'roughness': booleator, 'unstab': booleator},
                 engine='python')
print(df)
print(df.dtypes)

输出

         roughness unstab  corr_c_w  u_star  c_star
work
us            True   True     -0.39    0.35   -0.99
wang         False  False     -0.50     NaN     NaN
cheng        False   True       NaN     NaN     NaN
watanabe     False  False       NaN    0.15   -0.80
roughness       bool
unstab          bool
corr_c_w     float64
u_star       float64
c_star       float64
dtype: object

这个版本也照顾布尔值-所有NaN都会转换为False,否则Pandas会将dtype提升为Object(请参阅我的评论中的详细信息)…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐