我希望我的数据框能够自动截断长度超过一定长度的字符串。
基本上是:
pd.set_option('auto_truncate_string_exceeding_this_length', 255)
有什么想法吗?我有数百列,不想迭代每个数据点。如果在导入过程中可以实现这一点,那也没关系(例如pd.read_csv())
感谢。
答案 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)