我希望我的数据框自动截断长度超过特定长度的字符串。
基本上:
pd.set_option('auto_truncate_string_exceeding_this_length', 255)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我有数百列,不想遍历每个数据点。如果这可以在导入期间实现,那也很好(例如 pd.read_csv())
谢谢。
您可以使用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)
确保列类型为字符串。列索引也可以用来代替转换器字典中的名称。
我不确定您是否可以在整个 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)
| 归档时间: |
|
| 查看次数: |
15363 次 |
| 最近记录: |