Pandasデータフレーム列を整数ではなく文字列としてインポートする


97

次の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

3
コンバーターが機能しない問題を明確に強調しています。したがって、上記の質問に加えて、それはまだ役に立ちます。
Dav Clark

回答:


152

繰り返しますが、これはパンダ> = 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

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

編集:ここで解決策を参照してください:https//github.com/pydata/pandas/issues/2247


14
また、すべての列を文字列として解釈したい場合は、次のようにできますdtype = str
steveb 2017

空のフィールドはまだnp.nanとして通過しているようです
Josiah Yoder

1
ここで同じ質問。しかし、私はkeep_default_na = Falseを使用して問題を解決しました。
Jack.Lee

コメントありがとうございます。また、dypte = str AND keep_default_na = Falseを使用して、null値がnanにならないようにする必要がありました。
Ross117

19

これはおそらく最もエレガントな方法ではありませんが、仕事をこなすことができます。

In[1]: import numpy as np

In[2]: import pandas as pd

In[3]: df = pd.DataFrame(np.genfromtxt('/Users/spencerlyon2/Desktop/test.csv', dtype=str)[1:], columns=['ID'])

In[4]: df
Out[4]: 
                       ID
0  00013007854817840016671868
1  00013007854817840016749251
2  00013007854817840016754630
3  00013007854817840016781876
4  00013007854817840017028824
5  00013007854817840017963235
6  00013007854817840018860166

'/Users/spencerlyon2/Desktop/test.csv'ファイルのパスに置き換えるだけです


6

Pandas 1.0以降は、より簡単になりました。これは、列 'ID'をdtype 'string'として読み取ります。

pd.read_csv('sample.csv',dtype={'ID':'string'})

このスタートガイドでわかるように、 'string' dtypeが導入されています(文字列がdtype 'object'として扱われる前)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.