Python 使用lambda函数添加数据帧列
我试图用随机生成的两个大写字母的代码向Pandas数据框添加一列。对于随机代码生成,我编写了一个函数,但当我将其添加到数据帧时,结果只给出NaN。你知道怎么解决这个问题吗Python 使用lambda函数添加数据帧列,python,python-3.x,pandas,dataframe,lambda,Python,Python 3.x,Pandas,Dataframe,Lambda,我试图用随机生成的两个大写字母的代码向Pandas数据框添加一列。对于随机代码生成,我编写了一个函数,但当我将其添加到数据帧时,结果只给出NaN。你知道怎么解决这个问题吗 import pandas as pd import random import string def generateCode(): return random.choice(string.ascii_uppercase) + random.choice(string.ascii_uppercase) cars
import pandas as pd
import random
import string
def generateCode():
return random.choice(string.ascii_uppercase) + random.choice(string.ascii_uppercase)
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
df = pd.DataFrame(cars, columns = ['Brand', 'Price'])
df['Code'] = df.apply(lambda x: generateCode())
print(df)
给出输出:
Brand Price Code
0 Honda Civic 22000 NaN
1 Toyota Corolla 25000 NaN
2 Ford Focus 27000 NaN
3 Audi A4 35000 NaN
谢谢你的帮助 用于每个值的处理:
df['Code'] = df['Brand'].apply(lambda x: generateCode())
print(df)
Brand Price Code
0 Honda Civic 22000 AY
1 Toyota Corolla 25000 EN
2 Ford Focus 27000 VN
3 Audi A4 35000 ZZ
或使用轴=1的进行每行处理:
df['Code'] = df.apply(lambda x: generateCode(), axis=1)
print(df)
Brand Price Code
0 Honda Civic 22000 AY
1 Toyota Corolla 25000 EN
2 Ford Focus 27000 VN
3 Audi A4 35000 ZZ
别问我为什么,但这确实奏效了:
import pandas as pd
import random
import string
def generateCode():
print(random.choice(string.ascii_uppercase) + random.choice(string.ascii_uppercase))
return random.choice(string.ascii_uppercase) + random.choice(string.ascii_uppercase)
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
df = pd.DataFrame(cars, columns = ['Brand', 'Price'])
df['Code'] = df.Brand.map(lambda x: generateCode())
print(df)
如果有人能解释为什么这样做,我会很感激的事实上,我一直在打印,我认为问题在于你没有指定一列,所以它返回了整行,而不是每行值都是一个序列df.Brand.apply(lambda x:generateCode())
,这也可以通过添加df['code']=df.apply(lambda x:generateCode(),axis=1)