eve*_*007 9 python string-length dataframe pandas
在以下内容中pandas.DataFframe:
df =
alfa beta ceta
a,b,c c,d,e g,e,h
a,b d,e,f g,h,k
j,k c,k,l f,k,n
Run Code Online (Sandbox Code Playgroud)
如何删除alfa的列值超过2个元素的行?这可以使用长度函数来完成,我知道但没有找到具体的答案.
df = df[['alfa'].str.split(',').map(len) < 3]
Run Code Online (Sandbox Code Playgroud)
您可以使用依次对每一行进行该测试 pandas.DataFrame.apply()
print(df[df['alfa'].apply(lambda x: len(x.split(',')) < 3)])
Run Code Online (Sandbox Code Playgroud)
给出:
alfa beta ceta
1 a,b d,e,f g,h,k
2 j,k c,k,l f,k,n
Run Code Online (Sandbox Code Playgroud)
这是一个最容易记住的选项,它仍然包含 DataFrame,它是 Pandas 的“流血之心”:
1) 在数据框中创建一个具有长度值的新列:
df['length'] = df.alfa.str.len()
Run Code Online (Sandbox Code Playgroud)
2) 使用新列的索引:
df = df[df.length < 3]
Run Code Online (Sandbox Code Playgroud)
然后与上述时间进行比较,在这种情况下,由于数据非常小,因此与上述时间无关,并且通常不如您记住如何做某事而不必中断工作流程的可能性重要:
第1步:
%timeit df['length'] = df.alfa.str.len()
Run Code Online (Sandbox Code Playgroud)
每个循环 359 µs ± 6.83 µs(7 次运行的平均值 ± 标准偏差,每次 1000 次循环)
第2步:
df = df[df.length < 3]
Run Code Online (Sandbox Code Playgroud)
每个循环 627 µs ± 76.9 µs(7 次运行的平均值 ± 标准偏差,每次 1000 次循环)
好消息是,当规模增长时,时间不会线性增长。例如,对 30,000 行数据执行相同操作大约需要 3ms(因此 10,000x 数据,3x 速度增加)。Pandas DataFrame 就像一列火车,需要能量来让它运行(所以在绝对比较下对于小事情来说不是很好,但客观上并没有多大关系......因为小数据无论如何都很快)。
| 归档时间: |
|
| 查看次数: |
6859 次 |
| 最近记录: |