2014-12-31 60 views
1

我想讓我的數據框自動截斷比特定長度更長的字符串。在熊貓中設置最大字符串長度

基本上是:

pd.set_option('auto_truncate_string_exceeding_this_length', 255) 

任何想法?我有數百列,不想迭代每個數據點。如果這可以在導入期間實現,那也可以(如pd.read_csv())

謝謝。

回答

1

你的時候可以使用read_csv converters。比方說,你要截斷列名abc,你可以傳遞一個字典,功能就像

def auto_truncate(val): 
    return val[:255] 
df = pd.read_csv('file.csv', converters={'abc': auto_truncate} 

如果你有列具有不同長度的

df = pd.read_csv('file.csv', converters={'abc': lambda: x: x[:255], 'xyz': lambda: x: x[:512]} 

確保列類型爲字符串。列索引也可以用來代替轉換器字典中的名稱。

2

我不知道,你可以對整個DF做到這一點,下面將加載後的工作:

In [21]: 

df = pd.DataFrame({"a":['jasjdhadasd']*5, "b":arange(5)}) 
df 
Out[21]: 
      a b 
0 jasjdhadasd 0 
1 jasjdhadasd 1 
2 jasjdhadasd 2 
3 jasjdhadasd 3 
4 jasjdhadasd 4 
In [22]: 

for col in df: 
    if is_string_like(df[col]): 
     df[col] = df[col].str.slice(0,5) 
df 
Out[22]: 
     a b 
0 jasjd 0 
1 jasjd 1 
2 jasjd 2 
3 jasjd 3 
4 jasjd 4 

編輯

我認爲,如果你指定的ARGS的dtypes到read_csv那麼你可以設置最大長度:

df = pd.read_csv('file.csv', dtype=(np.str, maxlen))

我會努力這一點,並確認短期

UPDATE

可悲的是,你不能指定長度,將引發一個錯誤,如果你試試這個:

NotImplementedError: the dtype <U5 is not supported for parsing 

試圖通過ARG dtype=(str,5)

+0

可能爲時尚早,但似乎dtype =(np.str,maxlen)對我來說效果不錯。 – bcollins

+1

你怎麼申請這個?在'read_csv'還是'df.col.dtype =(np.str,maxlen)'?在read_csv期間 – EdChum

+0

。通過20M記錄沒有問題。如果這繼續工作,那麼看起來新年將會到來。非常感謝。 – bcollins