在弄清楚 pandas str.split 时遇到一些麻烦。出现的位置来自列值,而不是为要拆分的字符串放置一个静态值。我环顾四周寻找类似类型的问题,但大多数似乎只是采用静态方法来解决问题。
下面我有数据框。.str.split('|',1).str[-1] 将在管道 ('|') 第一次出现时删除字符串的左侧部分。这种静态方法将在整个系列中执行相同的操作。因为 occurrence 参数不会改变。
我想要发生的事情: .str.split('|', df['occurrence'] ).str[-1] 可以是动态的并利用出现列中的值并用作 str.split 出现争论。如果值为零或更小,则不会对字符串采取任何操作。
lambda 语句实际上工作并正确执行,但是,它从字符串的右侧开始,根据管道之间的值拆分和连接。但最后的结局是好的。不同的方法。我只是不能让它从字符串的左侧做同样的事情。
最后一点:删除需要从字符串的左边开始。
#-------------------
import pandas as pd
from pandas import DataFrame, Series
import numpy as np
data_1 = {'occurrence': [7,2,0,3,4,0],
'string': ['1|2|3|4|5|6|7|8|9|10|11|12','10|11.2|12.2|13.6|14.7','1|2|3',
'1|2|3|4|5|6|7|8','1|2.4|3|4.6|5|6.2|7|8.1','1|2|3|4|5'] }
df = pd.DataFrame(data_1)
df['string'] = df['string'].str.split('|',1).str[-1] # Works but is static only
# df['string'] = df['string'].str.split('|',df['occurrence']).str[-1] # Trying to use occurrence
# column value as argument
# Does work BUT starts with right side of string. Needs to be left.
# df['string'] = df.apply(lambda x: '|'.join(x['string'].split('|')[:x.occurrence - 2]), axis=1)
print(df)
#-------------------
Start with: What I would like:
occurrence string occurrence string
7 1|2|3|4|5|6|7|8|9|10|11|12 7 8|9|10|11|12
2 10|11.2|12.2|13.6|14.7 2 12.2|13.6|14.7
0 1|2|3 0 1|2|3
3 1|2|3|4|5|6|7|8 3 4|5|6|7|8
4 1|2.4|3|4.6|5|6.2|7|8.1 4 5|6.2|7|8.1
0 1|2|3|4|5 0 1|2|3|4|5
如果您能为我解决这个问题提供有关此主题的任何帮助,我将不胜感激。一如既往,您的时间很宝贵,我为此感谢您。
慕村225694
交互式爱情
茅侃侃
相关分类