【问题标题】:Data extraction with pandas or lists?用熊猫或列表提取数据?
【发布时间】:2023-02-25 21:44:25
【问题描述】:

(完全公开——然而,Python 编程和 Pandas 的相对初学者能够快速上手,并且绝对喜欢玩弄/操纵数据以获得我想要的东西!)

大家好——希望大家一切都好。

就是说,我正在解决一个问题,我有一个示例数据 CSV 文件,我使用 pandas 从 Web 将其导入到我的代码中,它工作得很棒............太棒了!

安装 Pandas 后也在学习的示例代码:

empCSV = pd.read_csv("https://data........")
print (empCSV)

打印时的示例输出:

       Work Date    Employee hours   Overtime Hours
0     02/22/2023  11 19 39 44 65 07         2.0
1     02/20/2023  03 17 26 38 54 15         3.0
2     02/18/2023  08 21 31 32 37 23         4.0
3     02/15/2023  31 32 54 60 63 12         4.0
4     02/13/2023  17 26 37 61 65 02         2.0
etc.....

现在,我想处理的主要数据(给定数量和频率)是员工工时。这些就是问题所在。既然我想玩弄这些数字,我是否应该只按列表过滤它们然后玩弄它们?因此,在阅读多个论坛时,它说我可以只提取这些值,然后将它们全部放入一个列表中……我这样做了……而且行得通。又厉害了!

示例代码

empHours = empCSV['Employee hours'].tolist()
print(empHours)

打印时的示例输出:

[1435 rows x 3 columns]
['11 19 39 44 65 07', '03 17 26 38 54 15', '08 21 31 32 37 23', '31 32 54 60 63 12', '17 26 37 61 65 02', ......

但是现在,我想获得所有第一个数值(即 11,03,08 等),所有第二个数值(即 19,17,21 等...)等等进入单独的字符串,以便我根据需要使用它们。

我应该坚持使用 Pandas 吗?我应该只使用循环列表和操作吗?我偏离轨道了吗?

.....去!

【问题讨论】:

    标签: python pandas list csv


    【解决方案1】:

    如果您熟悉 NumPy arrays,您可以拆分字符串列表并构造一个二维数组,该数组可以按列索引。

    构建二维 Numpy 数组

    假设'Employee Hours'列的样本:

          Employee Hours
    0  11 19 39 44 65 07
    1  03 17 26 38 54 15
    2  08 21 31 32 37 23
    3  31 32 54 60 63 12
    4  17 26 37 61 65 02
    

    以下代码可用于构造二维数组:

    import numpy as np
    
    # 1) Create a list consisting of each employee hours string
    empHours = empCSV['Employee hours'].tolist()
    
    # 2) Create a list of lists containing each hours string split up to form a proper list
    hoursList = []
    for hoursStr in empHours:
        hoursList.append(hoursStr.split())
    
    hours2DArray = np.array(hoursList) 
    # Alternatively: hoursArray = np.array([hoursStr.split() for hoursStr in empHours])
    
    print(hours2DArray)
    

    输出:

    [['11' '19' '39' '44' '65' '07']
     ['03' '17' '26' '38' '54' '15']
     ['08' '21' '31' '32' '37' '23']
     ['31' '32' '54' '60' '63' '12']
     ['17' '26' '37' '61' '65' '02']]
    

    按列索引

    要提取整个第 n 列(以获取每行的第 n 数值),请写入 hours2DArray[:, n-1]

    例如,

    # Output the second column
    print(hours2DArray[:, 1])
    

    输出:

    ['19' '17' '21' '32' '26']
    

    转置二维数组

    将行作为列可能更方便。这可以通过 .transpose() 方法来完成:

    # Transpose the 2D array to switch the row and column positions.
    hours2DArrayTr = hours2DArray.transpose()
    
    print(hours2DArrayTr)
    
    print("
    Fourth number values:", hours2DArrayTr[3])
    

    输出:

    [['11' '03' '08' '31' '17']
     ['19' '17' '21' '32' '26']
     ['39' '26' '31' '54' '37']
     ['44' '38' '32' '60' '61']
     ['65' '54' '37' '63' '65']
     ['07' '15' '23' '12' '02']]
    
    Fourth number values: ['44' '38' '32' '60' '61']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-15
      • 2015-09-10
      • 2022-11-13
      • 2021-05-25
      • 2018-07-06
      • 2022-10-15
      相关资源
      最近更新 更多