csv 用Pandas还是列表提取数据?

64jmpszr  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(98)

(Full披露-相对初学者与Python编程和Pandas,但是,我能够拿起东西很快,绝对喜欢玩/操纵数据,以获得我想要的!)
嘿,大家好-希望大家都很好。
也就是说,我正在解决一个问题,我有一个样本数据CSV文件,我已经从网上导入到我的代码使用Pandas和它的工作真棒......
安装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吗?我应该只使用列表和循环操作吗?我偏离轨道了吗?
......然后开始!

mum43rcc

mum43rcc1#

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

构造二维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("\nFourth 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']

相关问题