在熊猫中设置最大字符串长度

bco*_*ins 4 python pandas

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

基本上:

pd.set_option('auto_truncate_string_exceeding_this_length', 255)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我有数百列,不想遍历每个数据点。如果这可以在导入期间实现,那也很好(例如 pd.read_csv())

谢谢。

ilm*_*cio 8

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


Ali*_*zan 7

您可以使用read_csv 转换器。假设您想截断列名abc,您可以传递一个具有如下函数的字典

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

如果您有不同长度的列

df = pd.read_csv('file.csv', converters={'abc': lambda: x: x[:255], 'xyz': lambda: x: x[:512]}
Run Code Online (Sandbox Code Playgroud)

确保列类型为字符串。列索引也可以用来代替转换器字典中的名称。


EdC*_*ica 6

我不确定您是否可以在整个 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
Run Code Online (Sandbox Code Playgroud)

编辑

我想如果你在 args 中指定了 dtypes ,read_csv那么你可以设置最大长度:

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

我会尝试这个并尽快确认

更新

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

NotImplementedError: the dtype <U5 is not supported for parsing
Run Code Online (Sandbox Code Playgroud)

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