74

を使用して研究データを Pandas データ フレームにインポートしていread_csvます。

私のサブジェクト コードは 6 桁の数字で、特に生年月日です。私の被験者の一部では、これにより先頭にゼロが付いたコードが生成されます (例: "010816")。

Pandas にインポートすると、先頭のゼロが取り除かれ、列が としてフォーマットされint64ます。

この列を変更せずに文字列としてインポートする方法はありますか?

列にカスタム コンバーターを使用してみましたが、うまくいきません。Pandas が int に変換する前にカスタム変換が行われるようです。

4

6 に答える 6

33

これは、より短く、堅牢で、完全に機能するソリューションです。

変数名と目的のデータ型の間のマッピング (辞書) を定義するだけです。

dtype_dic= {'subject_id': str, 
            'subject_number' : 'float'}

そのマッピングを次のように使用しますpd.read_csv()

df = pd.read_csv(yourdata, dtype = dtype_dic)

出来上がり!

于 2016-04-29T12:25:28.153 に答える
1

converters幅がわかっている場合は、数値を固定幅に変換するために使用できます。

たとえば、幅が 5 の場合、

data = pd.read_csv('text.csv', converters={'column1': lambda x: f"{x:05}"})

これでうまくいきます。pandas==0.23.0 およびread_excel.

Python3.6 以上が必要です。

于 2019-05-01T09:46:54.037 に答える
0

希望どおりに列の型を指定できるとは思いません (最近変更がなく、6 桁の数字が日時に変換できる日付でない場合)。np.genfromtxt()そこから を使用して作成することができますDataFrame

編集: Wes Mckinney のブログを見てください。pandas 0.1011月から新しいパーサーが出てくるようです。

于 2012-11-06T11:53:58.833 に答える