स्ट्रिंग के रूप में आयात पांडा डेटाफ्रेम कॉलम इंट नहीं


97

मैं निम्नलिखित सीएसवी को आयात करना चाहता हूं क्योंकि स्ट्रिंग्स इंटि 64 के रूप में नहीं। पंडों ने 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
यह स्पष्ट रूप से एक ऐसे मुद्दे पर प्रकाश डालता है जहां कन्वर्टर्स काम करने में विफल रहते हैं। तो, यह अभी भी उपर्युक्त प्रश्न के अतिरिक्त उपयोगी है।
दाव क्लार्क

जवाबों:


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:।
स्टीव जूल

ऐसा लगता है कि खाली खेत अभी भी np.nan के माध्यम से आते हैं
योशिय्याह योडर

1
यहाँ एक ही सवाल है। लेकिन मैंने Keep_default_na = गलत का उपयोग करके मेरी समस्या हल कर दी।
जैक।

टिप्पणियों के लिए धन्यवाद। मुझे भी dypte = str और Keep_default_na = False का उपयोग करना पड़ा ताकि शून्य मान नैन न हों।
रॉस 117

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

पांडा 1.0 के बाद से यह बहुत अधिक सीधा हो गया। यह कॉलम 'आईडी' को dtype 'string' के रूप में पढ़ेगा:

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

जैसा कि हम इस आरंभ किए गए मार्गदर्शिका में देख सकते हैं , 'स्ट्रिंग' dtype पेश किया गया है (इससे पहले कि स्ट्रिंग को dtype 'ऑब्जेक्ट' के रूप में माना जाता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.