Nhập cột khung dữ liệu gấu trúc dưới dạng chuỗi không phải int


97

Tôi muốn nhập csv sau dưới dạng chuỗi không phải là int64. Pandas read_csv tự động chuyển đổi nó thành int64, nhưng tôi cần cột này dưới dạng chuỗi.

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

Thật không may khi sử dụng bộ chuyển đổi cho cùng một kết quả.

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
Nó rõ ràng làm nổi bật một vấn đề trong đó các bộ chuyển đổi không hoạt động. Vì vậy, nó vẫn hữu ích ngoài câu hỏi đã đề cập ở trên.
Dav Clark

Câu trả lời:


152

Chỉ muốn nhắc lại điều này sẽ hoạt động trong gấu trúc> = 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

Tôi cũng đang tạo ra một vấn đề về việc phát hiện tràn số nguyên.

CHỈNH SỬA: Xem độ phân giải tại đây: https://github.com/pydata/pandas/issues/2247


14
Nó cũng có vẻ, nếu bạn muốn tất cả các cột để được giải thích như dây đàn, người ta có thể làm như sau: dtype = str.
steveb

Có vẻ như những cánh đồng trống vẫn đi qua khi np.nan
Josiah Yoder

1
cùng một câu hỏi ở đây. Nhưng tôi đã sử dụng keep_default_na = False đã giải quyết được vấn đề của tôi.
Jack.Lee

Cảm ơn bạn đã cho ý kiến. Tôi cũng phải sử dụng dypte = str AND keep_default_na = False để các giá trị null không phải là nan giải.
Ross117

19

Đây có lẽ không phải là cách thanh lịch nhất để làm, nhưng nó sẽ hoàn thành công việc.

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

Chỉ cần thay thế '/Users/spencerlyon2/Desktop/test.csv'bằng đường dẫn đến tệp của bạn


6

Kể từ pandas 1.0, nó trở nên đơn giản hơn nhiều. Điều này sẽ đọc cột 'ID' dưới dạng dtype 'string':

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

Như chúng ta có thể thấy trong hướng dẫn Bắt đầu này , dtype 'string' đã được giới thiệu (trước khi các string được coi là 'object' của dtype).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.