请教一下:python 如何按列读取的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一下:python 如何按列读取的?相关的知识,希望对你有一定的参考价值。
在没有“列”概念的数据格式里面是无法按列读取的。你使用python时,数据格式必须设计了列。才能按列读取。追问
能麻烦给一个小例子和相应的代码么?
追答按理应该你说明你的列是什么环境的列。
在二维数据结构中,比如图片、数据表。列是指纵向的一排数据
比如
a=[
[1,2,3],
[4,5,6]
[7,8,9]
]
这里第一列是1,4,7,第2列是2,5,8
取值就
第一列a[0][0],a[1][0],a[2][0]
第二列a[0][1],a[1][1],a[2][1]
这和手动有什么区别????不敢恭维
要的是和readline一样的东东
比如用的是excel,然后用python读写,否则是没有列的概念的。
2.关于python操作excel,可参考:
【记录】Python中生成(写入数据到)Excel文件中
(此处不给贴地址,请自己用google搜帖子标题,即可找到帖子的地址)
Python 使用哈希键动态地按列(标题)读取 csv
【中文标题】Python 使用哈希键动态地按列(标题)读取 csv【英文标题】:Python read csv by column (header) dynamically with hash key 【发布时间】:2022-01-22 22:37:33 【问题描述】:我尝试如下垂直读取一个 csv 文件,以使用 python 插入到石墨/碳时间序列数据库中。
"No.","time","00:00:00","00:00:01","00:00:02","00:00:03","00:00:04","00:00:05","00:00:06","00:00:07","00:00:08","00:00:09","00:00:0A"
"1","2021/09/12 02:16",235,610,345,997,446,130,129,94,555,274,4
"2","2021/09/12 02:17",364,210,371,341,294,87,179,106,425,262,3
"3","2021/09/12 02:18",297,343,860,216,275,81,73,113,566,274,3
"4","2021/09/12 02:19",305,243,448,262,387,64,63,119,633,249,3
"5","2021/09/12 02:20",276,151,164,263,315,86,92,175,591,291,1
"6","2021/09/12 02:21",264,343,287,542,312,83,72,122,630,273,4
"7","2021/09/12 02:22",373,157,266,446,246,90,173,90,442,273,2
"8","2021/09/12 02:23",265,112,241,307,329,64,71,82,515,260,3
"9","2021/09/12 02:24",285,247,240,372,176,92,67,83,609,620,1
"10","2021/09/12 02:25",289,964,277,476,356,84,74,104,560,294,1
"11","2021/09/12 02:26",279,747,227,573,569,82,77,99,589,229,5
"12","2021/09/12 02:27",338,370,315,439,653,85,165,346,367,281,2
"13","2021/09/12 02:28",269,135,372,262,307,73,86,93,512,283,4
"14","2021/09/12 02:29",281,207,688,322,233,75,69,85,663,276,2
我希望建立一个字典“元组”内容如下: 事实上,我需要在每列的标题中写入每次的值,并将日期转换为纪元时间:
“2021/09/12 02:16”= 纪元 1631405760
tuples.append(('perf.type.serial.object.00:00:00.TOTAL_IOPS', (1631405760 ,235)))
tuples.append(('perf.type.serial.object.00:00:00.TOTAL_IOPS', (1631405820 ,364)))
...
tuples.append(('perf.type.serial.object.00:00:01.TOTAL_IOPS', (1631405760 ,610)))
tuples.append(('perf.type.serial.object.00:00:01.TOTAL_IOPS', (1631405820 ,210)))
我可以列出标题,但我不知道如何保留每个标题的日期和值
import csv
def read_csv(file_path):
with open(file_path, 'rt') as f:
csv_reader = csv.reader(f, delimiter=',')
for line in csv_reader:
print(line)
tuples.append(('perf.type.serial.object.header.col.TOTAL_IOPS', (1631405760 ,235))) ?
read_csv('my.csv')
非常感谢您的帮助
【问题讨论】:
pandas 数据框非常适合这里。您可以将 csv 读取为数据框,然后迭代您需要的列。如果您需要更多信息,请告诉我们。谢谢 是的,我看到熊猫库可以执行这种读取,但我从不使用熊猫... 请将我的回复视为答案,如果您希望我添加更多信息,请告诉我! 非常感谢 simpleApp!这正是我需要的。 最后,我得到了这些值:('perf.type.serial.object.epoch.TOTAL_IOPS', (1639472400, 1639472400)) ? 【参考方案1】:-
读取 csv 文件。
import pandas as pd
df=pd.read_csv("raw_data.csv") # read the csv
-
添加新列值,请根据您的时代逻辑进行调整。
import time, os
date_pattern='%Y/%m/%d %H:%M'
df['epoch'] = df.apply(lambda row: int(time.mktime(time.strptime(row.time,date_pattern))), axis=1) # create epoch as a column
df
-
根据需要将数据保存在列表或任何 ds 中。
tuples_saved=[] # data will be saved in a list
formated_str='perf.type.serial.object.00:00:00.TOTAL_IOPS'
for each_column in list(df.columns)[2:]:
for e in zip(list(df['epoch']),list(df[each_column])):
#print(f"perf.type.serial.object.each_column.TOTAL_IOPS",e)
tuples_saved.append((f"perf.type.serial.object.each_column.TOTAL_IOPS",e))
【讨论】:
【参考方案2】:试试这个。
with open(file_path, 'r') as f:
csv_reader = csv.reader(f, delimiter=',')
dict_from_csv=rows[0]:rows[1] for rows in csv_reader
print(dict_from_csv)
【讨论】:
以上是关于请教一下:python 如何按列读取的?的主要内容,如果未能解决你的问题,请参考以下文章