1. ホーム
  2. python

[解決済み] pandas dataframeのカラムをintではなくstringでインポートする。

2022-08-30 06:13:01

質問

以下のcsvをint64ではなく文字列でインポートしたいです。Pandasのread_csvは自動的にint64に変換しますが、私はこのカラムを文字列として必要とします。

ID
00013007854817840016671868
00013007854817840016749251
00013007854817840016754630
00013007854817840016781876
00013007854817840017028824
00013007854817840017963235
00013007854817840018860166


df = read_csv('sample.csv')

df.ID
>>

0   -9223372036854775808
1   -9223372036854775808
2   -9223372036854775808
3   -9223372036854775808
4   -9223372036854775808
5   -9223372036854775808
6   -9223372036854775808
Name: ID

残念ながらコンバータを使っても同じ結果になります。

df = read_csv('sample.csv', converters={'ID': str})
df.ID
>>

0   -9223372036854775808
1   -9223372036854775808
2   -9223372036854775808
3   -9223372036854775808
4   -9223372036854775808
5   -9223372036854775808
6   -9223372036854775808
Name: ID

どのように解決するのですか?

pandas >= 0.9.1で動作することを再確認しておきます。

In [2]: read_csv('sample.csv', dtype={'ID': object})
Out[2]: 
                           ID
0  00013007854817840016671868
1  00013007854817840016749251
2  00013007854817840016754630
3  00013007854817840016781876
4  00013007854817840017028824
5  00013007854817840017963235
6  00013007854817840018860166

整数オーバーフローの検出についても問題を作成しています。

EDIT: こちらの解決策をご覧ください。 https://github.com/pydata/pandas/issues/2247

他の人の役に立つので更新してください。

を持つために すべてのカラム をstrとする場合、次のようにします(コメントより)。

pd.read_csv('sample.csv', dtype = str)

を持つには 最もまたは選択的なカラム をstrとする場合、次のようにすることができます。

# lst of column names which needs to be string
lst_str_cols = ['prefix', 'serial']
# use dictionary comprehension to make dict of dtypes
dict_dtypes = {x : 'str'  for x in lst_str_cols}
# use dict on dtypes
pd.read_csv('sample.csv', dtype=dict_dtypes)