2014-12-31 62 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