2

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 です。理由はありますか?

すべてを 1 つの dtype でまとめて表示 + 統計分析の 1 つの方法を表現したいと考えています。

スペースのないブール列の空白セルを先頭に行を追加することでこれを達成しました。そのため、すべてがオブジェクトになります。次に fhs = fhs.drop([1002])、その行を削除するために使用しますが、データ型は引き続き良好です。

この行なしで保存して、毎回「正しい」タイプでデータをロードできるようにしたいのですが、一部の列がすべて「はい」または「いいえ」になり、一部が空白になる可能性があるかどうかはわかりません細胞。出来ますか?

ありがとう、初心者の質問でごめんなさい。

例:

輸入中

      C1    C2    C3

R1   Yes   Yes    No

R2    No    No    No

R3   Yes         Yes

R4   Yes   Yes   Yes

最初の列は、Yes、No、Yes、Yes として df に入ります。下に bool xxxx と入力します。

2 列目は、Yes、No、NaN、Yes 型オブジェクトとして df に入ります

3 列目は FALSE、FALSE、TRUE、TRUE 型の bool として df に入ります

くそ。ちょうどチェックしました。私は間違っていた。はいといいえの場合、列の型はオブジェクトです。

インポートするときに、それらをすべてオブジェクトにして yes と no に固執するように伝えたいと思います。理由は次のとおりです。他のクラスメンバーはイエスとノーを見ます

解決策を試してみたところ、どうなりましたか。

これが私のデータです: リンク

コードは次のとおりです:
from pandas import *
import numpy as np
import pandas as 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)  

および出力リンク

4

2 に答える 2

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')])
于 2012-11-17T21:30:06.617 に答える
2

pandas.read_csv の converters フィールドを使用できます

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)})
于 2012-10-18T14:45:25.697 に答える