Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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 如何根据条件替换Panda dataframe列中的单元格_Python_Pandas - Fatal编程技术网

Python 如何根据条件替换Panda dataframe列中的单元格

Python 如何根据条件替换Panda dataframe列中的单元格,python,pandas,Python,Pandas,这篇文章由两个问题组成,涉及我在基于给定条件替换Panda数据帧中的元素时遇到的问题。我刚接触熊猫,所以任何建议都会很有帮助 1:修改特定长度的字符串 考虑Panda dataframe对象中的列A,df: SSIC 103 1040 1054 1065 107 我想将整数0附加到长度小于4的每个单元格。也就是说,我想得到: SSIC 0103 1040 1054 1065 0107 这些值的类型为float64 目前,我使用了以下方法: SSIC1 = df['SSIC'].astype(

这篇文章由两个问题组成,涉及我在基于给定条件替换Panda数据帧中的元素时遇到的问题。我刚接触熊猫,所以任何建议都会很有帮助

1:修改特定长度的字符串 考虑Panda dataframe对象中的列A,df:

SSIC
103
1040
1054
1065
107
我想将整数0附加到长度小于4的每个单元格。也就是说,我想得到:

SSIC
0103
1040
1054
1065
0107
这些值的类型为float64

目前,我使用了以下方法:

SSIC1 = df['SSIC'].astype('int64').astype(str)

for i,n in enumerate(SSIC1):
    if len(SSIC1[i]) == 4:
       SSIC1[i] = '0' + SSIC1[i]

df['SSIC'] = SSIC1
它是有效的,但我不知道它是否有点冗长。有没有更直接的方法来解决这个问题

2:使用where子句时设置复制警告 我在数据框中有以下两列

A  B
2  1
3  4
4  6
5  4
5  2
我想用B中同一行的值替换A列中取值为5的单元格

我使用了where条件:

df['A']=df['A'].where(df['A'] == 5, df['B'], inplace=True)
​但它给了我以下错误:

SettingWithCopyWarning:正在尝试在副本上设置值 从数据帧切片。尝试使用.loc[行索引器、列索引器]= 取而代之的是价值观

请参阅文档中的注意事项: 如果名称=='main':


此警告在我第一次运行时没有出现。你知道它为什么会出现吗?

第一部分称之为矢量化:


如果数据类型已经是str,则可能不需要调用astype。请使用dataframe.at[]函数。即:

df.at[row\u index,column\u name]=“所需的分配”

例如:

df = pd.DataFrame(data=[['iqbal',2,88]],columns=['name','roll','marks'],index=[0])
df.at[0,'name']= 'Joy'

`

似乎简单地使用df['A'],其中df['A']==5,df['B'],inplace=True就行了。哇,这太好了。我可以澄清一下调用向量化函数时的含义吗?它意味着一次对整个df/系列进行操作,而不是一次迭代一行/元素。请在回答中添加一些解释,以便其他人可以从中学习
df = pd.DataFrame(data=[['iqbal',2,88]],columns=['name','roll','marks'],index=[0])
df.at[0,'name']= 'Joy'