如何使用python读取两列

如何使用python读取两列,python,pandas,numpy,Python,Pandas,Numpy,如何读取两列,第一列包含字母,第二列包含值 C0 -0.158040 C1 -0.157117 C2 -0.143805 C3 -0.140561 S4 0.059175 H5 0.128940 H6 0.129007 H7 0.142421 H8 0.139979 我经常在下面使用这个脚本(它适用于两个或更多列),但这次不使用 with open('file.csv') as f: f=[x.s

如何读取两列,第一列包含字母,第二列包含值

C0      -0.158040
C1      -0.157117
C2      -0.143805
C3      -0.140561
S4      0.059175
H5      0.128940
H6      0.129007
H7      0.142421
H8      0.139979
我经常在下面使用这个脚本(它适用于两个或更多列),但这次不使用

with open('file.csv') as f:
    f=[x.strip() for x in f if x.strip()]
    data=[tuple(map(float,x.split())) for x in f[2:]]
    oX=[x[0] for x in data]
    oY=[x[1] for x in data]
谢谢你的帮助

如果您想从csv文件中播放数据,熊猫是一个不错的选择。 它可以避免不必要的迭代,并进行数据操作 轻松的

您可以将文件加载到数据帧中

df = pd.read_csv('file.csv')
然后选择所需的列

df_temp = df.iloc[:,0:2]
要获得一对行值,可以使用tolist()函数

输出

[['C1', -0.157117], ['C2', -0.143805], ['C3', -0.140561], ['S4', 0.059175], ['H5', 0.12894], ['H6', 0.12900699999999998], ['H7', 0.142421], ['H8', 0.139979]]
如果您想从csv文件中播放数据,熊猫是一个不错的选择。 它可以避免不必要的迭代,并进行数据操作 轻松的

您可以将文件加载到数据帧中

df = pd.read_csv('file.csv')
然后选择所需的列

df_temp = df.iloc[:,0:2]
要获得一对行值,可以使用tolist()函数

输出

[['C1', -0.157117], ['C2', -0.143805], ['C3', -0.140561], ['S4', 0.059175], ['H5', 0.12894], ['H6', 0.12900699999999998], ['H7', 0.142421], ['H8', 0.139979]]

下面是另一个解决方案:

import csv

with open('file.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        res = row[0].split()
        oX = res[0]
        oY = res[1]
        print (oX, oY)
输出:

('C0', '-0.158040')
('C1', '-0.157117')
('C2', '-0.143805')
('C3', '-0.140561')
('S4', '0.059175')
('H5', '0.128940')
('H6', '0.129007')
('H7', '0.142421')
('H8', '0.139979')

下面是另一个解决方案:

import csv

with open('file.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        res = row[0].split()
        oX = res[0]
        oY = res[1]
        print (oX, oY)
输出:

('C0', '-0.158040')
('C1', '-0.157117')
('C2', '-0.143805')
('C3', '-0.140561')
('S4', '0.059175')
('H5', '0.128940')
('H6', '0.129007')
('H7', '0.142421')
('H8', '0.139979')

您根本不需要任何库,更不用说熊猫或re了。只需读取文件并使用列表理解加字符串方法来提取数据

with open('file.csv', 'r') as f:
    data = f.readlines()

oX = [line.replace('\n', '').split(',')[0] for line in data]
oY = [float(line.replace('\n', '').split(',')[1]) for line in data]
如果你想让每个标签与它的值配对,你可以把它们拉上拉链

paired = zip(ox, oY)

您根本不需要任何库,更不用说熊猫或re了。只需读取文件并使用列表理解加字符串方法来提取数据

with open('file.csv', 'r') as f:
    data = f.readlines()

oX = [line.replace('\n', '').split(',')[0] for line in data]
oY = [float(line.replace('\n', '').split(',')[1]) for line in data]
如果你想让每个标签与它的值配对,你可以把它们拉上拉链

paired = zip(ox, oY)

如果分隔符包含可变数量的空格字符:

import csv
with open('myfile.csv', newline='') as cf:
   cfr = csv.reader(cf, delimiter=' ')
   oX=[]
   oY=[]
   for row in cfr:
       oX.append(row[0])
       oY.append(float(row[-1]))

如果分隔符包含可变数量的空格字符:

import csv
with open('myfile.csv', newline='') as cf:
   cfr = csv.reader(cf, delimiter=' ')
   oX=[]
   oY=[]
   for row in cfr:
       oX.append(row[0])
       oY.append(float(row[-1]))

使用
numpy.loadtxt
的惰性解决方案可能是:

labels = numpy.loadtxt(fileName, dtype=np.str, usecols=[0])
values = numpy.loadtxt(fileName, dtype=np.float64, usecols=[1])
pairs = numpy.stack((labels, values), axis=-1)

使用
numpy.loadtxt
的惰性解决方案可能是:

labels = numpy.loadtxt(fileName, dtype=np.str, usecols=[0])
values = numpy.loadtxt(fileName, dtype=np.float64, usecols=[1])
pairs = numpy.stack((labels, values), axis=-1)

您可以使用熊猫。阅读csv,您可以吗?您可以使用熊猫。阅读csv,您可以吗?谢谢您,Amarpreet Singh。谢谢您,Amarpreet Singh。谢谢您。但oY生成错误:indexer错误:列表索引超出范围数据文件是以逗号分隔还是以制表符分隔?您提供的示例显示了以制表符分隔的数据,但我认为您这样表示是为了便于阅读。由于文件名为file.csv,我假设它实际上是一个逗号分隔值文件。如果它实际上是CSV,那么不查看文件就很难知道错误的来源。可能是某个地方的逗号,谢谢。但oY生成错误:indexer错误:列表索引超出范围数据文件是以逗号分隔还是以制表符分隔?您提供的示例显示了以制表符分隔的数据,但我认为您这样表示是为了便于阅读。由于文件名为file.csv,我假设它实际上是一个逗号分隔值文件。如果它实际上是CSV,那么不查看文件就很难知道错误的来源。它可能是某个地方的一个错误逗号。