为了账号安全,请及时绑定邮箱和手机立即绑定

创建熊猫数据框:在 numpy 上映射一个函数

创建熊猫数据框:在 numpy 上映射一个函数

慕容708150 2023-02-15 17:20:10
我正在创建一个 pandas 数据框并使用 numpy 来模拟值。我想将随机生成的 ID 分配给熊猫中的两列,为此,我编写了一个返回字母数字 ID 的函数。但是,使用我当前的代码,它只调用一次函数并为所有行返回相同的 id。我需要每一行的唯一 ID,因此需要有效地遍历 pandas 数据框。理想情况下,.apply这样做,但是,我需要在创建 pandas 数据框时完成此操作。这是我的代码:# Generate alphanumeric lease id and property idsdef gen_ids(length):        ids = ''.join(random.choices(string.ascii_letters + string.digits, k=length))    return ids# Create DataFramedf = pd.DataFrame({                   'LeaseID': gen_ids(10)                   'PropertyID': gen_ids(10),                   'xyz': np.random.choice(List1, 1000),                     'abc': np.random.choice(List2, 1000),                 })结果:
查看完整描述

2 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

您需要为每个单元格调用一次 get_ids,而不是为每一列调用一次:


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

...


查看完整回答
反对 回复 2023-02-15
?
白衣非少年

TA贡献1155条经验 获得超0个赞

替代代码:


gen_ids修改了问题中的函数以返回 a Series。


# Import libraries

import random

import string

import pandas as pd

import numpy as np


# Generate alphanumeric lease id and property ids

def gen_ids(length, len_df):

    s = []

    for i in range(len_df):

        ids = ''.join(random.choices(string.ascii_letters + string.digits, k=length))

        s.append(ids)

    return s


# Create DataFrame

List1 = ['a','b','c','D','e']

List2 = ['G','h','k','L','q']

df = pd.DataFrame({

                   'LeaseID': gen_ids(10, 1000),

                   'PropertyID': gen_ids(10, 1000),

                   'xyz': np.random.choice(List1, 1000),  

                   'abc': np.random.choice(List2, 1000)

                 })

输出


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

..          ...         ...  ..  ..



查看完整回答
反对 回复 2023-02-15
  • 2 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号