我正在尝试制作一个.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
读取它,它就能完美运行。前两列是布尔值,其他列是浮点数。然而,没有空白,它根本不是人类可读的。当我用
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>
答案 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(请参阅我的评论中的详细信息)......