Python将csv文件列读入列表,忽略标题
我有一个文件“data.csv”,看起来像Python将csv文件列读入列表,忽略标题,python,list,csv,Python,List,Csv,我有一个文件“data.csv”,看起来像 ColA, ColB, ColC 1,2,3 4,5,6 7,8,9 我想打开文件列并将其读入列表,省略该列表的第一个条目,例如 dataA = [1,4,7] dataB = [2,5,8] dataC = [3,6,9] 实际上,有超过3列,列表非常长,这只是格式的一个示例。我试过: csv_file = open('data.csv','rb') csv_array = [] for row in csv.reader(csv_file,
ColA, ColB, ColC
1,2,3
4,5,6
7,8,9
我想打开文件列并将其读入列表,省略该列表的第一个条目,例如
dataA = [1,4,7]
dataB = [2,5,8]
dataC = [3,6,9]
实际上,有超过3列,列表非常长,这只是格式的一个示例。我试过:
csv_file = open('data.csv','rb')
csv_array = []
for row in csv.reader(csv_file, delimiter=','):
csv_array.append(row)
然后,我会将csv_数组的每个索引分配给一个列表,例如
dataA = [int(i) for i in csv_array[0]]
但我有一些错误:
_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
而且,它感觉像是一种非常冗长的方式,只是将数据保存到几个列表中
谢谢
编辑:
我是这样解决的:
import pandas as pd
df = pd.read_csv('data.csv', names = ['ColA','ColB','ColC']
dataA = map(int,(df.ColA.tolist())[1:3])
并对其余列重复此操作。似乎csv文件中有OSX行结尾。尝试将csv文件保存为Windows逗号分隔的.csv格式 还有更简单的方法来完成您使用csv阅读器所做的工作:
csv_array = []
with open('data.csv', 'r') as csv_file:
reader = csv.reader(csv_file)
# remove headers
reader.next()
# loop over rows in the file, append them to your array. each row is already formatted as a list.
for row in reader:
csv_array.append(row)
然后可以设置dataA=csv\u array[0]跳过标题,在单独的行上创建读卡器。然后,要将行列表转换为列列表,请使用zip: 给你:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
因此,如果需要:
dataA = data[0]
使用熊猫:
import pandas as pd
df = pd.DataFrame.from_csv(path)
rows = df.apply(lambda x: x.tolist(), axis=1)
首先,如果使用csv.readercsv_文件(分隔符=',')读取csv文件,则仍将读取头 csv_数组[0]将是标题行->['ColA'、'ColB'、'ColC'] 此外,如果您使用的是mac,则此处已提到此问题: 如果你想用这些数据做更多的分析,我建议你改用pandas&numpy。它将csv文件读取到数据帧。
为了让那些试图解决类似问题的人明白这一点,也许没有熊猫,这里有一个带注释的简单重构 导入csv 以“r”模式而不是“rb”模式打开文件 csv\u文件=打开'data.csv','r' 数据a=[] 数据=[] dataC=[] 读取并放弃第一行,以跳过标题 csv_file.readline 阅读时拆分列 对于csv.readercsv_文件中的a、b、c,分隔符=',': 将每个变量附加到单独的列表中 附录A 数据附录B 数据附录 这对于将单个字段转换为数字没有任何作用,如果您需要的话,可以使用appendinta等,但应该足够明确和灵活,向您展示如何适应新的要求。使用csv.DictReader选择特定的列
dataA = []
dataB = []
with open('data.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=',')
for row in csv_reader:
dataA.append(row['ColA'])
dataB.append(row['ColB'])
如果您不介意使用导入,我建议使用tablib,您可以在这里找到:该文件是从excel导出的,据我所知,它只是一个普通的.csv文件……好的,这几乎可以工作了,但我得到的是行而不是列,即dataA=[1,2,3],我想要dataA=[1,4,7],很抱歉遗漏了问题的这一部分。您只需使用zip进行转置:csv_数组=zipcsv_数组[0]、csv_数组[1]、csv_数组[2]。可能有更简单的方法,但我认为这是最详细、最容易获得的方法。当csv包含电池时,为什么要使用pandas?从版本0.21.0起已弃用:改用pandas.read_csv。例如:pd.read\u csvpath
dataA = []
dataB = []
with open('data.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=',')
for row in csv_reader:
dataA.append(row['ColA'])
dataB.append(row['ColB'])