我想让我的数据框自动截断比特定长度更长的字符串。在熊猫中设置最大字符串长度
基本上是:
pd.set_option('auto_truncate_string_exceeding_this_length', 255)
任何想法?我有数百列,不想迭代每个数据点。如果这可以在导入期间实现,那也可以(如pd.read_csv())
谢谢。
我想让我的数据框自动截断比特定长度更长的字符串。在熊猫中设置最大字符串长度
基本上是:
pd.set_option('auto_truncate_string_exceeding_this_length', 255)
任何想法?我有数百列,不想迭代每个数据点。如果这可以在导入期间实现,那也可以(如pd.read_csv())
谢谢。
你的时候可以使用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]}
确保列类型为字符串。列索引也可以用来代替转换器字典中的名称。
我不知道,你可以对整个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)
可能为时尚早,但似乎dtype =(np.str,maxlen)对我来说效果不错。 – bcollins
你怎么申请这个?在'read_csv'还是'df.col.dtype =(np.str,maxlen)'?在read_csv期间 – EdChum
。通过20M记录没有问题。如果这继续工作,那么看起来新年将会到来。非常感谢。 – bcollins