Python的大熊猫混合Boolean是/ True和列的NaN(Python Pandas Mix

2019-09-24 06:31发布

我这样做,其中建议R或Stata的健康科学课程。 我试图使用Python / numpy的/熊猫,而不是因为我想用它在未来的金融时间序列分析。

该数据是Stata的格式,所以我复制领域并将其保存为一个CSV 。 所有字段进口的罚款,只是有一些/否其中一些有空白字段是列的。

导入命令

fhs = pd.io.parsers.read_csv('F:\\BioStatistics\\fds\\fhs_c2.csv', header=0, index_col=0)

如果有空白字段的D型为对象(有意义)

如果没有空白一些列转换为TRUE/FALSE ,别人留下的Yes/No ,但D型是BOOL。 任何想法,为什么?

我希望所有由一个D型,并表示观看+统计分析的一种方法。

我有在空白细胞是没有空间的布尔列开始添加行实现这一点 - 所以一切都成为一个对象。 然后我使用fhs = fhs.drop([1002])命令来删除行和数据类型还是好的。

我很想把它保存而不该行并只能够每次加载数据与“正确”的类型,但不知道是否有可能当一些列的会都yes或no,有的还会有空白细胞。 可能吗?

谢谢你,很抱歉的新手问题。

例:

输入

      C1    C2    C3

R1   Yes   Yes    No

R2    No    No    No

R3   Yes         Yes

R4   Yes   Yes   Yes

第一列进入DF的是,否,是的,是bool类型下面XXXX

第2列进入DF的是,否,NaN,则是类型的对象

第三塔进入DF为FALSE,FALSE,TRUE,TRUE bool类型

该死的。 只是检查。 我错了。 如果它是的,没有那么列类型为对象。

我想进口,使他们所有的对象,并坚持对时,告诉它没有因为:1。我觉得第二列必须是对象(作为其混合,否则我认为)2.数据集是/否和其他类成员将寻求yes和no

发生了什么事,当我试图解决方案。

这是我的数据: 链接

下面的代码:
从熊猫进口*
导入numpy的为NP
进口大熊猫作为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)  

输出链接

Answer 1:

您可以使用转换器领域从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)})


Answer 2:

注意,在即将到来的大熊猫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')])


文章来源: Python Pandas Mixed Boolean Yes/True and NaN Columns