Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 在dataframe的列中的某个位置添加字符串_Python_Pandas - Fatal编程技术网

Python 在dataframe的列中的某个位置添加字符串

Python 在dataframe的列中的某个位置添加字符串,python,pandas,Python,Pandas,基本上: hash = "355879ACB6" hash = hash[:4] + '-' + hash[4:] print (hash) 3558-79ACB6 但是对于数据帧 我只能成功地在前后添加字符串,如下所示: data ['col1'] = data['col1'] + 'teststring' 如果我尝试从上面的链接[:amountofcharacterstocutafter]中的解决方案,在某个位置添加值,如下所示: test = data[:2] +

基本上:

hash = "355879ACB6"
hash = hash[:4] + '-' + hash[4:]
print (hash)
3558-79ACB6

但是对于数据帧

我只能成功地在前后添加字符串,如下所示:

data ['col1'] = data['col1'] + 'teststring'
如果我尝试从上面的链接
[:amountofcharacterstocutafter]
中的解决方案,在某个位置添加值,如下所示:

test = data[:2] + 'zz'
print (test)
它似乎不适用,因为
[:2]
操作符对数据帧的作用与对字符串的作用不同。它在前两行之后剪切输出

目标: 我想在某个位置加一个“-”。假设输入行值为“TTTT1234”,输出应为“TTTT-1234”。对于每一行。

使用。例如:

import pandas as pd
df = pd.DataFrame({
    "c": ["TTTT1234"]
})
df["c"].str[:4] + "-" + df["c"].str[4:] # It will output 'TTTT-1234'
str提供矢量化字符串函数。

使用。例如:

import pandas as pd
df = pd.DataFrame({
    "c": ["TTTT1234"]
})
df["c"].str[:4] + "-" + df["c"].str[4:] # It will output 'TTTT-1234'

pd.Series.str提供矢量化字符串函数。

您可以执行列表中显示的操作,但数据帧中有一列,因此它(有点)不同

因此,尽管您可以这样做:

hash = "355879ACB6"
hash = hash[:4] + '-' + hash[4:]
要在数据帧上执行此操作,您至少可以通过两种方式执行:

考虑这个虚拟df:

    LOCATION    Hash
0   USA         355879ACB6
1   USA         455879ACB6
2   USA         388879ACB6
3   USA         800879ACB6
4   JAPAN       355870BCB6
5   JAPAN       355079ACB6
A.矢量化:最有效的原因

df['new_hash']=df['Hash'].str[:4]+'-'+df['Hash'].str[4:]

    LOCATION    Hash        new_hash
0   USA         355879ACB6  3558-79ACB6
1   USA         455879ACB6  4558-79ACB6
2   USA         388879ACB6  3888-79ACB6
3   USA         800879ACB6  8008-79ACB6
4   JAPAN       355870BCB6  3558-70BCB6
5   JAPAN       355079ACB6  3550-79ACB6
B.采用lambda:直观实施,但在性能方面吸引力较小

df['new_hash'] = df.apply(lambda x: x['Hash'][:4]+'-'+x['Hash'][4:], axis=1)

您可以执行列表上显示的操作,但数据帧中有一列,因此它(有点)不同

因此,尽管您可以这样做:

hash = "355879ACB6"
hash = hash[:4] + '-' + hash[4:]
要在数据帧上执行此操作,您至少可以通过两种方式执行:

考虑这个虚拟df:

    LOCATION    Hash
0   USA         355879ACB6
1   USA         455879ACB6
2   USA         388879ACB6
3   USA         800879ACB6
4   JAPAN       355870BCB6
5   JAPAN       355079ACB6
A.矢量化:最有效的原因

df['new_hash']=df['Hash'].str[:4]+'-'+df['Hash'].str[4:]

    LOCATION    Hash        new_hash
0   USA         355879ACB6  3558-79ACB6
1   USA         455879ACB6  4558-79ACB6
2   USA         388879ACB6  3888-79ACB6
3   USA         800879ACB6  8008-79ACB6
4   JAPAN       355870BCB6  3558-70BCB6
5   JAPAN       355079ACB6  3550-79ACB6
B.采用lambda:直观实施,但在性能方面吸引力较小

df['new_hash'] = df.apply(lambda x: x['Hash'][:4]+'-'+x['Hash'][4:], axis=1)

非常感谢。我用了A,然后删除了旧专栏。谢谢。我使用了A,然后删除了旧列。欢迎使用Stackoverflow。我喜欢你的问题:它们很清楚。你已经接受了下面的答案作为对你问题的适当回答,这非常好。如果一个或多个答案有用,您也可以向上投票。这是他们应得的欢迎来到Stackoverflow。我喜欢你的问题:它们很清楚。你已经接受了下面的答案作为对你问题的适当回答,这非常好。如果一个或多个答案有用,您也可以向上投票。这是他们应得的。