Python 创建数据帧:在numpy上映射函数
我正在创建一个pandas数据帧,并使用numpy模拟值。我想将随机生成的ID分配给pandas中的两列,为此,我编写了一个返回字母数字ID的函数 但是,在我当前的代码中,它只调用函数一次,并为所有行返回相同的ID。我需要为每一行提供唯一的ID,因此需要高效地迭代数据帧 理想情况下,.apply可以做到这一点,但是,我需要在创建pandas数据帧时完成这一点 这是我的密码:Python 创建数据帧:在numpy上映射函数,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我正在创建一个pandas数据帧,并使用numpy模拟值。我想将随机生成的ID分配给pandas中的两列,为此,我编写了一个返回字母数字ID的函数 但是,在我当前的代码中,它只调用函数一次,并为所有行返回相同的ID。我需要为每一行提供唯一的ID,因此需要高效地迭代数据帧 理想情况下,.apply可以做到这一点,但是,我需要在创建pandas数据帧时完成这一点 这是我的密码: # Generate alphanumeric lease id and property ids def gen_ids
# Generate alphanumeric lease id and property ids
def gen_ids(length):
ids = ''.join(random.choices(string.ascii_letters + string.digits, k=length))
return ids
# Create DataFrame
df = pd.DataFrame({
'LeaseID': gen_ids(10)
'PropertyID': gen_ids(10),
'xyz': np.random.choice(List1, 1000),
'abc': np.random.choice(List2, 1000),
})
结果:
您需要为每个单元格调用一次get_ID,而不是为每个列调用一次:
df = pd.DataFrame({
'LeaseID': [gen_ids(10) for _ in range(1000)],
'PropertyID': [gen_ids(10) for _ in range(1000)],
'xyz': np.random.choice(List1, 1000),
'abc': np.random.choice(List2, 1000),
})
输出为:
LeaseID PropertyID xyz abc
0 NHQikWbUZI phwUIn9IgZ 8 19
1 f6aBvrSeWe zV0tmst212 9 15
2 hdTHtm7LvU lC6uQJeHRX 8 14
3 FnppdLbbcq na9dVUO3Ay 2 17
4 arXAq4EvzT 7dvKTclo6o 1 18
...
您需要为每个单元格调用一次get_ID,而不是为每个列调用一次:
df = pd.DataFrame({
'LeaseID': [gen_ids(10) for _ in range(1000)],
'PropertyID': [gen_ids(10) for _ in range(1000)],
'xyz': np.random.choice(List1, 1000),
'abc': np.random.choice(List2, 1000),
})
输出为:
LeaseID PropertyID xyz abc
0 NHQikWbUZI phwUIn9IgZ 8 19
1 f6aBvrSeWe zV0tmst212 9 15
2 hdTHtm7LvU lC6uQJeHRX 8 14
3 FnppdLbbcq na9dVUO3Ay 2 17
4 arXAq4EvzT 7dvKTclo6o 1 18
...
备选代码:
修改了问题中的gen_id函数以返回序列
输出
print(df)
LeaseID PropertyID xyz abc
0 gxpSTdLoPH rswWVZuBIW a q
1 OSdR5vOA0I gHKdcYKw5s e L
2 WAmNQ4ieRH ThC1Apk5YA e h
3 BYUTgbKcbl IKcdjvH9da c L
4 4CNFqbu7hO uJEWhlEufu a k
.. ... ... .. ..
备选代码:
修改了问题中的gen_id函数以返回序列
输出
print(df)
LeaseID PropertyID xyz abc
0 gxpSTdLoPH rswWVZuBIW a q
1 OSdR5vOA0I gHKdcYKw5s e L
2 WAmNQ4ieRH ThC1Apk5YA e h
3 BYUTgbKcbl IKcdjvH9da c L
4 4CNFqbu7hO uJEWhlEufu a k
.. ... ... .. ..