如何用Pandas完全忽略csv中的空格

时间:2016-03-03 19:12:19

标签: python csv pandas

我正在尝试制作一个.csv文件,其格式既具有人类可读性,又易于阅读pandas。这意味着列应该整齐分离,以便您可以轻松识别每个值所属的列。问题是,用空白填充它有一些熊猫功能的减少。到目前为止,我所拥有的是

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 s,这是一个很大的改进。但是,列名和布尔列仍然是带有空格的字符串。

任何直接用熊猫读取.csv的方法?或许有可能csv格式有点并且仍然有一个人类可读的.csv的干净阅读?

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

1 个答案:

答案 0 :(得分:2)

试试这个:

Response.Flush();
Response.End();

输出:

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)

此版本还会处理布尔值 - 所有NaN都将转换为False,否则Pandas会将dtype提升为Object(请参阅我的评论中的详细信息)......