2014-04-01 53 views
2

我正在將大型csv文件讀入熊貓中,其中一些字符串中包含數千個字符。是否有快速的方法來限制列的寬度,即只保留前100個字符?在熊貓中截斷列寬

+0

你的意思是事後,還是你想/需要截斷他們,甚至之前,他們甚至存儲在框架? – DSM

+0

之前,即使存儲將是偉大的。申請成爲事後的最快方式? – Luke

+0

現在寫一個申請。有沒有辦法獲得一個類型的對象的列的寬度? – Luke

回答

7

如果你可以看到整個事情到內存中,你可以使用str法向量操作:

>>> df = pd.read_csv("toolong.csv") 
>>> df 
    a      b c 
0 1 1256378916212378918293 2 

[1 rows x 3 columns] 
>>> df["b"] = df["b"].str[:10] 
>>> df 
    a   b c 
0 1 1256378916 2 

[1 rows x 3 columns] 

另外請注意,您可以使用

>>> df["b"].str.len() 
0 10 
Name: b, dtype: int64 

我與長度A系列最初想知道如果

>>> pd.read_csv("toolong.csv", converters={"b": lambda x: x[:5]}) 
    a  b c 
0 1 12563 2 

[1 rows x 3 columns] 

會更好,但我實際上不知道如果轉換器是逐行調用的,或者在整個列中調用後。

+1

''converters''被逐行調用(通過一個cython函數)。我認爲''str''轉換會更快(你的第一個例子) – Jeff

+0

@Jeff:啊,很高興知道。這意味着如果字符串很荒謬而且你不想大塊,那麼你可以用它來確保你的行數不會超過一行。 – DSM

+0

聽起來沒錯,這只是代碼inspectino(又名眼球)。你知道這是多麼可靠:) – Jeff