在pandas中设置最大字符串长度

时间:2014-12-31 14:48:21

标签: python pandas

我希望我的数据框能够自动截断长度超过一定长度的字符串。

基本上是:

pd.set_option('auto_truncate_string_exceeding_this_length', 255)

有什么想法吗?我有数百列,不想迭代每个数据点。如果在导入过程中可以实现这一点,那也没关系(例如pd.read_csv())

感谢。

4 个答案:

答案 0 :(得分:4)

我不确定你是否可以在整个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))

我会尽快尝试并确认

<强>更新

遗憾的是,您无法指定长度,如果您尝试这样做会引发错误:

NotImplementedError: the dtype <U5 is not supported for parsing

尝试传递arg dtype=(str,5)

答案 1 :(得分: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 :(得分:1)

您也可以简单地使用

截断单个列
df['A'] = df['A'].str[:255]

答案 3 :(得分:0)

pd.set_option('display.max_colwidth', 255)