Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫们,在最后一个'之后移除所有东西_';_Python_Pandas - Fatal编程技术网

Python 熊猫们,在最后一个'之后移除所有东西_';

Python 熊猫们,在最后一个'之后移除所有东西_';,python,pandas,Python,Pandas,我在下面的专栏中看到了以下类型的字符串。我想解析出每个字符串最后一个\uu之后的所有内容,如果没有\u,则保持字符串不变。(正如我在下面尝试的那样,只会排除不带\uuu的字符串) 到目前为止,我已经尝试了以下内容,请参见:。但它只是在第一次之后解析出所有内容 d6['SOURCE\u NAME']=d6['SOURCE\u NAME'].str.split('uu').str[0] 下面是“我的源名称”列中的一些示例字符串 Stackoverflow_1234 Stack_Over_Flow_1

我在下面的专栏中看到了以下类型的字符串。我想解析出每个字符串最后一个
\uu
之后的所有内容,如果没有
\u
,则保持字符串不变。(正如我在下面尝试的那样,只会排除不带
\uuu
的字符串)

到目前为止,我已经尝试了以下内容,请参见:。但它只是在第一次
之后解析出所有内容

d6['SOURCE\u NAME']=d6['SOURCE\u NAME'].str.split('uu').str[0]

下面是“我的源名称”列中的一些示例字符串

Stackoverflow_1234
Stack_Over_Flow_1234
Stackoverflow
Stack_Overflow_1234
预期:

Stackoverflow
Stack_Over_Flow
Stackoverflow
Stack_Overflow

任何帮助都将不胜感激。

您可以尝试应用lambda,如下所示:

d6['SOURCE_NAME'] = df['SOURCE_NAME'].apply(lambda x: x.split('_')[0])

希望有帮助

您可以尝试这样应用lambda:

d6['SOURCE_NAME'] = df['SOURCE_NAME'].apply(lambda x: x.split('_')[0])
希望有帮助

使用rsplit()返回您想要实现的结果,您可以告诉它拆分字符串的次数

s = "Stack_Over_Flow_1234"
s.rsplit('_', 1)[0] # Split my string one time and get the first part of it
然后使用rsplit()返回
'Stack\u Over\u Flow'

返回您想要实现的结果,您可以告诉它拆分字符串的次数

s = "Stack_Over_Flow_1234"
s.rsplit('_', 1)[0] # Split my string one time and get the first part of it

然后返回
'Stack\u Over\u Flow'

使用
str.rsplit
str.get
的组合以获得所需的结果
str.rsplit
仅从末尾拆分字符串,而
str.get
获取pd.Series对象中迭代器的第n个元素


答复
d6['SOURCE\u NAME']=df['SOURCE\u NAME'].str.rsplit(''uu',n=1).str.get(0)

rsplit
中的
n
参数限制了输出中拆分的数量,因此您只保留最后一个'\u1'之前的所有内容

尽管使用
pd.Series.apply
的解决方案的速度几乎是原来的一半,但我还是喜欢这个解决方案,因为它的语法更具表现力。如果您想使用pd.Series.apply
解决方案(更快),请检查定时部分


例子
strs=['Stackoverflow_1234',
“叠加在流量上”,
“堆栈溢出”,
'堆栈溢出\u 1234']
df=pd.DataFrame(数据={'SOURCE_NAME':strs})
这导致

print(df)
            SOURCE_NAME
0    Stackoverflow_1234
1  Stack_Over_Flow_1234
2         Stackoverflow
3   Stack_Overflow_1234
使用提议的解决方案:

df['SOURCE\u NAME'].str.rsplit(''uu',1).str.get(0)
0堆栈溢出
1个堆栈溢出流
2堆垛溢出
3堆栈溢出
名称:源名称,数据类型:对象
时间 有趣的是,使用
pd.Series.str不一定比使用
pd.Series.apply快:

将熊猫作为pd导入
df=pd.DataFrame(数据={'SOURCE_NAME':['stackoverflow_1234_abcd']*1000})
%timeit df['SOURCE_NAME'].apply(lambda x:x.rsplit('uu',1)[0])
每个回路497µs±30.2µs(7次运行的平均值±标准偏差,每个1000个回路)
%timeit df['SOURCE\u NAME'].str.rsplit(''uu',n=1).str.get(0)
每个回路1.04 ms±4.27µs(7次运行的平均值±标准偏差,每个1000个回路)
#增加行数x 100
df=局部固结([df]*100)
%timeit df['SOURCE_NAME'].apply(lambda x:x.rsplit('uu',1)[0])
每个回路31.7 ms±1.5 ms(7次运行的平均值±标准偏差,每个10个回路)
%timeit df['SOURCE\u NAME'].str.rsplit(''uu',n=1).str.get(0)
每个回路84.1 ms±6.88 ms(7次运行的平均值±标准偏差,每个10个回路)

使用
str.rsplit
str.get
的组合来获得您想要的结果
str.rsplit
仅从末尾拆分字符串,而
str.get
获取pd.Series对象中迭代器的第n个元素


答复
d6['SOURCE\u NAME']=df['SOURCE\u NAME'].str.rsplit(''uu',n=1).str.get(0)

rsplit
中的
n
参数限制了输出中拆分的数量,因此您只保留最后一个'\u1'之前的所有内容

尽管使用
pd.Series.apply
的解决方案的速度几乎是原来的一半,但我还是喜欢这个解决方案,因为它的语法更具表现力。如果您想使用pd.Series.apply
解决方案(更快),请检查定时部分


例子
strs=['Stackoverflow_1234',
“叠加在流量上”,
“堆栈溢出”,
'堆栈溢出\u 1234']
df=pd.DataFrame(数据={'SOURCE_NAME':strs})
这导致

print(df)
            SOURCE_NAME
0    Stackoverflow_1234
1  Stack_Over_Flow_1234
2         Stackoverflow
3   Stack_Overflow_1234
使用提议的解决方案:

df['SOURCE\u NAME'].str.rsplit(''uu',1).str.get(0)
0堆栈溢出
1个堆栈溢出流
2堆垛溢出
3堆栈溢出
名称:源名称,数据类型:对象
时间 有趣的是,使用
pd.Series.str不一定比使用
pd.Series.apply快:

将熊猫作为pd导入
df=pd.DataFrame(数据={'SOURCE_NAME':['stackoverflow_1234_abcd']*1000})
%timeit df['SOURCE_NAME'].apply(lambda x:x.rsplit('uu',1)[0])
每个回路497µs±30.2µs(7次运行的平均值±标准偏差,每个1000个回路)
%timeit df['SOURCE\u NAME'].str.rsplit(''uu',n=1).str.get(0)
每个回路1.04 ms±4.27µs(7次运行的平均值±标准偏差,每个1000个回路)
#增加行数x 100
df=局部固结([df]*100)
%timeit df['SOURCE_NAME'].apply(lambda x:x.rsplit('uu',1)[0])
每个回路31.7 ms±1.5 ms(7次运行的平均值±标准偏差,每个10个回路)
%timeit df['SOURCE\u NAME'].str.rsplit(''uu',n=1).str.get(0)
每个回路84.1 ms±6.88 ms(7次运行的平均值±标准偏差,每个10个回路)

您可以使用string.split(“”)函数将字符串拆分为围绕每个下划线的子字符串列表,然后在不使用最后一个元素的情况下重新组合它们。下面是一个使用您的示例的片段:

a = ["Stackoverflow_1234", "Stack_Over_Flow_1234", "Stackoverflow", "Stack_Overflow_1234"]

for e in a:

    # Split the string into a list, separated at '_'
    splitStr = e.split("_")

    # If there is only 1 element, we can use it directly
    if len(splitStr) == 1:
        print(splitStr[0])

    # Slice off the final substring and join the remaining 
    # substrings back together with underscores
    else:
        print("_".join(splitStr[:-1]))

可以使用string.split(“”)函数将字符串拆分为围绕每个下划线的子字符串列表,然后在不使用最后一个元素的情况下重新组合它们。下面是一个使用您的示例的片段:

a = ["Stackoverflow_1234", "Stack_Over_Flow_1234", "Stackoverflow", "Stack_Overflow_1234"]

for e in a:

    # Split the string into a list, separated at '_'
    splitStr = e.split("_")

    # If there is only 1 element, we can use it directly
    if len(splitStr) == 1:
        print(splitStr[0])

    # Slice off the final substring and join the remaining 
    # substrings back together with underscores
    else:
        print("_".join(splitStr[:-1]))

你好,小伙子
n=1
pd.Series.str.rsplit
方法上的一个参数,它在普通Python上的对应项为
str.rsplit
,普通参数为
maxslit=1
。这些参数只是从右侧限制拆分的数量。请注意,这些参数的默认值为
-1
,这意味着不限制拆分的数量。如果我说
pd.Series.s