python - 使用切片和数据帧系列作为结尾的子字符串

标签 python pandas dataframe slice series

我有一个这样的数据框:

Blockquote

df  
Out[458]:

    strings
0  lui sau chun  
1  d1420152  
2  98764879333  
3  minglee    
4  g1927384  
5  hannah  

我想要做的是为字符串列中的每个值提取 2/3 的字符串。正如您所看到的,每个字符串的长度不同,因此要切片的 2/3 位置也会不同。我的目标输出如下所示:

Blockquote

df
Out[459]:
   strings          substring
0  lui sau chun     liu sau
1  d1420152         d1420   
2  98764879333      98764879
3  minglee          ming
4  g1927384         g1927
5  annah            hann

我尝试过:

x=(df['strings'].str.len()*2/3).apply(np.floor).astype(int)
df['strings'].str.slice(0,x) 

但这只是给了我以下输出:

Blockquote

Out[451]: 
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
Name: strings, dtype: float64

有人可以帮忙吗?

谢谢

最佳答案

更好的是使用Series.apply使用 count lens 并通过 [] 索引进行选择:

print (df['strings'].apply(lambda x: x[:int(len(x)*2/3)]))
0    lui sau 
1       d1420
2     9876487
3        ming
4       g1927
5        hann
Name: strings, dtype: object
<小时/>

另一个解决方案:

首先创建新列,然后使用axis=1应用按行进行处理:

df['l'] =(df['strings'].str.len()*2/3).apply(np.floor).astype(int)
print (df)
        strings  l
0  lui sau chun  8
1      d1420152  5
2   98764879333  7
3       minglee  4
4      g1927384  5
5        hannah  4

print (df.apply(lambda x: x['strings'][0: x['l']], axis=1))
0    lui sau 
1       d1420
2     9876487
3        ming
4       g1927
5        hann
dtype: object

关于python - 使用切片和数据帧系列作为结尾的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196544/

相关文章:

python - 循环的可变长度 - tensorflow

python - 创建一个 3 x 4 矩阵并添加列

python - 具有附加值的 Argparse 参数

python - 读取大文本文件时数据类型错误

pandas - 如何将 pandas 列的值除以其他列

python - 在数据帧上使用 pandas 的重新索引方法时,为什么原始值会丢失?

python - 通过 Windows 上的 ctypes 将文件描述符传递给 C 库函数

python - ValueError : Wrong number of items passed 500, placement implies 1, Python 和 Pandas

python - 将 Dataframe 转换为包含 Pandas 数组的单元格的 Series

python - 按第一个、第二个、第三个字符的字母顺序对索引进行排序