我正在做一个健康科学课程,建议使用R或Stata。我正在尝试使用Python / Numpy / Pandas,因为我希望将来用它来进行金融时间序列分析。
数据是Stata格式,因此我复制了这些字段并将其保存为CSV
。
所有字段导入都很好,除了有许多列是/否,其中一些列有空白字段。
导入命令是
fhs = pd.io.parsers.read_csv('F:\\BioStatistics\\fds\\fhs_c2.csv', header=0, index_col=0)
如果有一个空白字段,则dtype是对象(有意义)
如果没有空格,某些列会转换为TRUE/FALSE
,其他列将保留为Yes/No
,但dtype为bool。知道为什么吗?
我希望所有人都能通过一个dtype来表达观察+统计分析的方法。
我通过在开头添加一行来为没有空格的布尔列添加一行来实现这一点 - 所以一切都变成了一个对象。然后我用
fhs = fhs.drop([1002])
删除该行和数据类型仍然很好。
我喜欢在没有这一行的情况下保存它,只是能够每次使用“正确”类型加载数据但是不知道是否有可能当某些列具有全部是或否,以及一些将有空白单元格。有可能吗?
谢谢,抱歉新手问题。
导入
C1 C2 C3
R1 Yes Yes No
R2 No No No
R3 Yes Yes
R4 Yes Yes Yes
第一列是df,是,否,是,是,在下面键入bool xxxx
第二列是df,是,否,NaN,是类型对象
第3列进入df为FALSE,FALSE,TRUE,TRUE类型bool
该死。刚检查过。我错了。如果是,则为no,则列类型为object。
我想在导入时告诉它以使它们成为对象并坚持使用yes和no,因为: 我认为第二列必须是对象(否则我认为是混合的) 2.数据集是yes / no,其他类成员将查看是和否
以下是我的数据:link
这是代码:
来自pandas import *
导入numpy为np
将pandas导入为pd
def convert_bool(col):
if str(col).title() == "True": #check for nan
return "Yes"
elif str(col).title() == "False":
return "No"
else:
return col
fhs = pd.read_csv('F:\\BioStatistics\\fds\\StatExport.csv', converters={"death": lambda x:convert_bool(x)}, header=0, index_col=0)
并输出link
答案 0 :(得分:2)
您可以使用pandas.read_csv
中的转换器字段def convert_bool(col):
if str(col).title() == "True": #check for nan
return "YES"
elif str(col).title() == "False":
return "NO"
else:
return col
pandas.read_csv(file_in, converters={"C3": lambda x:convert_bool(x)})
答案 1 :(得分:2)
注意即将推出的pandas 0.9.2(包括一个新的文件解析器引擎),你将能够做到:
In [1]: paste
data = """A,B,C
Yes,No,Yes
No,Yes,Yes
Yes,,Yes
No,No,No"""
result = read_csv(StringIO(data), dtype=object)
## -- End pasted text --
In [2]: result
Out[2]:
A B C
0 Yes No Yes
1 No Yes Yes
2 Yes NaN Yes
3 No No No
In [3]: result = read_csv(StringIO(data), dtype=object, na_filter=False)
In [4]: result
Out[4]:
A B C
0 Yes No Yes
1 No Yes Yes
2 Yes Yes
3 No No No
甚至(获得NumPy数组):
In [5]: result = read_csv(StringIO(data), dtype='S3', na_filter=False, as_recarray=True)
In [6]: result
Out[6]:
array([('Yes', 'No', 'Yes'), ('No', 'Yes', 'Yes'), ('Yes', '', 'Yes'),
('No', 'No', 'No')],
dtype=[('A', '|S3'), ('B', '|S3'), ('C', '|S3')])