是否有更快的方法来查找Pandas DataFrame中最长字符串的长度,而不是下面示例中显示的长度?
import numpy as np
import pandas as pd
x = ['ab', 'bcd', 'dfe', 'efghik']
x = np.repeat(x, 1e7)
df = pd.DataFrame(x, columns=['col1'])
print df.col1.map(lambda x: len(x)).max()
# result --> 6
Run Code Online (Sandbox Code Playgroud)
df.col1.map(lambda x: len(x)).max()
使用IPython进行计时时,运行大约需要10秒钟%timeit
.
Mar*_*ius 67
帝斯曼的建议似乎是关于没有做一些手动微优化的最佳方法:
%timeit -n 100 df.col1.str.len().max()
100 loops, best of 3: 11.7 ms per loop
%timeit -n 100 df.col1.map(lambda x: len(x)).max()
100 loops, best of 3: 16.4 ms per loop
%timeit -n 100 df.col1.map(len).max()
100 loops, best of 3: 10.1 ms per loop
Run Code Online (Sandbox Code Playgroud)
请注意,明确使用该str.len()
方法似乎没有太大的改进.如果您不熟悉IPython,这是非常方便的%timeit
语法来源,我肯定建议快速测试这样的事情.
更新添加的截图:
作为次要添加,您可能希望遍历数据框中的所有对象列:
for c in df:
if df[c].dtype == 'object':
print('Max length of column %s: %s\n' % (c, df[c].map(len).max()))
Run Code Online (Sandbox Code Playgroud)
这将防止bool,int类型等引发错误.
可以扩展为其他非数字类型,如'string_','unicode_'即
if df[c].dtype in ('object', 'string_', 'unicode_'):
Run Code Online (Sandbox Code Playgroud)
有时,您想要最长的字符串的长度(以字节为单位)。这与使用特殊Unicode字符的字符串有关,在这种情况下,以字节为单位的长度大于常规长度。这在特定情况下可能非常相关,例如对于数据库写入。
df_col_len = int(df[df_col_name].str.encode(encoding='utf-8').str.len().max())
Run Code Online (Sandbox Code Playgroud)
上面的行有多余的内容str.encode(encoding='utf-8')
。封闭输出,int()
因为否则它是一个numpy对象。
归档时间: |
|
查看次数: |
35842 次 |
最近记录: |