python - 更有效地拆分列

标签 python string pandas dataframe

我有一个数据框,其中的列x包含由数字和字母组成的字符串,如下所示

x
1 a
2 b
3 a
34 c
35 d

我想将此列拆分为两个 yz,一个包含数值,另一个包含字符串,所以我这样做

df['y']=df['x'].str.strip().str.split(' ').str.get(0)          
df['z']=df['x'].str.split(' ').str.get(1)

有没有更有效的方法?当在大文件中应用此操作时,需要几分钟的时间。

更新:字符串和数字是可选的,并不总是出现。可能有一个数字或一个字符串 示例:

x =['6.1 a', ' d', '6.5', '5.6 c', '6.9', '6.1', '5.9 b', '4.5', '4.3', '4.3', '5.7', '5.7', '4.7 x', '5.1', '5.1']

进入

y=['6.1', '', '6.5', '5.6', '6.9', '6.1', '5.9', '4.5', '4.3', '4.3', '5.7', '5.7', '4.7', '5.1', '5.1']
z=['a', 'd', '', 'c', '', '', 'b', '', '', '', '', '', 'x', '', '']

最佳答案

您可以将 apply 与 lambda 一起使用,其速度比您的解决方案更快:

df["y"] = df.x.apply(lambda x:x.split()[0])
df["z"] = df.x.apply(lambda x:x.split()[1] if len(x.split())>1 else "ND")
df
     x    y   z
0   1 a    1   a
1   2 b    2   b
2   3 a    3   a
3  34 c   34   c
4  35 d   35   d
5   1.5  1.5  ND

我无法与扩展版本进行比较,因为我没有最新的 pandas 版本。 我认为它比提取版本更快。

如果您不关心使用 pandas 方法,那么使用字符串方法和列表理解会更快:

y, z = zip(*[(i.split()[0], i.split()[1] if " " in i else "") for i in x])

不过,您可以轻松地将其放入 df 中。

时间

def ori(df):
    df['y']=df['x'].str.strip().str.split(' ').str.get(0)          
    df['z']=df['x'].str.split(' ').str.get(1)


def lam(df):
    df["y"] = df.x.apply(lambda x:x.split()[0])
    df["z"] = df.x.apply(lambda x:x.split()[1] if len(x.split())>1 else "ND")

编辑:条件相对时间相同。

当 len(df) = 5 时

%timeit lam(df)
1000 loops, best of 3: 818 µs per loop

%timeit ori(df)
1000 loops, best of 3: 1.63 ms per loop

当 len(df) = 10000 时

%timeit lam(df)
10 loops, best of 3: 16.4 ms per loop

%timeit ori(df)
10 loops, best of 3: 33.1 ms per loop

关于python - 更有效地拆分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337228/

相关文章:

python - Pandas 按多列上的多个自定义聚合函数分组

javascript - .data 函数和/或 jsonrequest 方法

python - Matplotlib:在 3d 图中显示

python - Pandas 提高了合并数据帧的效率

python - 在Python中使用相同的整数对不同列中的相同值进行编码

c - 在 C 语言中,如何将包含数字的字符串转换为 int 数组?

python - 问如何自动从数组列表中抓取单词

python - 了解 python 2.7 email.feedparser Feedparser __init__ 函数

python - 单元格中的 Pandas 字符串到新行

java - 从逗号分隔的字符串中读取=之后的值