代码之家  ›  专栏  ›  技术社区  ›  Mark K

从一组具有混合数字类型的范围创建数据帧

  •  0
  • Mark K  · 技术社区  · 5 年前

    我有一个5个范围的列表,我想从中创建一个数据帧。生成的数据帧应具有10行5列。列的值将是给定范围内的随机数。

    给定的范围是整数和浮点数的混合,即。 [1,31] 表示一系列整数, [4, 172.583333] 表示一个浮动范围。

    下面的代码只用于整数或浮点数的输出。

    如何将整数和浮点数混合在一起?即A列包含整数,B列包含浮点,C列也包含浮点,D和e列包含整数。

    谢谢您。

    import numpy as np
    import pandas as pd
    
    min_max = [
    [1, 31],
    [4, 172.583333],
    [0, 88.50561],
    [4, 297],
    [3, 37]]
    
    for a, b in min_max:
        df = pd.DataFrame(np.random.randint(a,b,size=(10, 5)), columns=list('ABCDE'))   # to generate intergers only
        df = pd.DataFrame(np.random.uniform(a,b,size=(10, 5)), columns=list('ABCDE'))   # to generate floats only
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Oliver W.    5 年前

    创建一个单独的 pd.Series 基于所需的数据类型。在下面的示例中,通过检查最小值或最大值是否为浮点类型,可以推断出这一点。还有其他方法可以做到这一点,比如显式地添加所需的数据类型。

    然后,使用序列列表创建一个数据帧。

    import numpy as np
    import pandas as pd
    
    min_max = ([1, 31], [4, 172.583333], [0, 88.50561], [4, 297], [3, 37])
    
    
    def make_series(low, high, name):
        if any(isinstance(_, float) for _ in (low, high)):
            func = np.random.uniform
        else:
            func = np.random.randint
        return pd.Series(func(low, high, size=(10,)), name=name)
    
    
    pd.concat([make_series(lo, hi, name) for (lo, hi), name in zip(min_max, "ABCDE")],
              axis=1)