Python 索引列和行返回不正确的值
我正在使用pandas处理CSV文件。此CSV文件非常大,第一行作为GPS坐标,第一列作为GPS坐标。然后,所有值都对应于GPS坐标 CSV示例 (实际CSV为336 x 481) 问题 我编写了一些函数,试图创建一个字典,其中GPS元组作为键,相应的值作为映射值。代码正确执行,并返回字典,但当我根据CSV检查值时,值不匹配 代码Python 索引列和行返回不正确的值,python,csv,pandas,Python,Csv,Pandas,我正在使用pandas处理CSV文件。此CSV文件非常大,第一行作为GPS坐标,第一列作为GPS坐标。然后,所有值都对应于GPS坐标 CSV示例 (实际CSV为336 x 481) 问题 我编写了一些函数,试图创建一个字典,其中GPS元组作为键,相应的值作为映射值。代码正确执行,并返回字典,但当我根据CSV检查值时,值不匹配 代码 import csv import pandas as pd df = pd.read_csv('201501.csv') class csvRead(objec
import csv
import pandas as pd
df = pd.read_csv('201501.csv')
class csvRead(object):
def getRow(self):
with open('201501.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
return row[1:]
def getColomn(self):
x_coord = df['Fill']
return x_coord
def test(self):
df = pd.read_csv('201501.csv')
return df
def yCoord():
y_list_base = csvRead()
y_list_string = y_list_base.getRow()
y_list = [float(i) for i in y_list_string]
return y_list
def xCoord():
x_list_base = csvRead()
x_list_string = x_list_base.getColomn()
x_list = [float(i) for i in x_list_string]
return x_list
def createCoords():
csv = csvRead()
df = csv.test()
x_list = xCoord()
y_list = yCoord()
coord_dict = {}
for x_coord in x_list:
for y_coord in y_list:
x_loc = x_list.index(x_coord)
y_loc = y_list.index(y_coord)
value = df.iloc[x_loc,y_loc]
current_pair = (x_coord,y_coord)
coord_pair = current_pair
coord_dict[coord_pair] = value
return coord_dict
如果您在逻辑或代码中发现任何错误,请告诉我,我可以修复这些错误。如果您不需要pandas可以使用的结果,类似这样的方法可以工作:
import csv
coords = {}
with open('201501.csv') as csvfile:
read_csv = csv.reader(csvfile)
x_coords = read_csv.next()[1:]
for row in read_csv:
for x_coord, column in zip(x_coords, row[1:]):
value = None if 'NaN' in column else float(column)
coords[(float(row[0]), float(x_coord))] = value
对于示例输入,这将使用以下内容填充coords:
{(10.123, 1.123): None,
(10.123, 2.123): 0.2345,
(10.123, 3.123): None,
(11.123, 1.123): 0.4353,
(11.123, 2.123): None,
(11.123, 3.123): 0.2568,
(12.123, 1.123): 0.7653,
(12.123, 2.123): None,
(12.123, 3.123): 1.456}
如果您不需要pandas可以使用的结果,那么类似的方法可以工作:
import csv
coords = {}
with open('201501.csv') as csvfile:
read_csv = csv.reader(csvfile)
x_coords = read_csv.next()[1:]
for row in read_csv:
for x_coord, column in zip(x_coords, row[1:]):
value = None if 'NaN' in column else float(column)
coords[(float(row[0]), float(x_coord))] = value
对于示例输入,这将使用以下内容填充coords:
{(10.123, 1.123): None,
(10.123, 2.123): 0.2345,
(10.123, 3.123): None,
(11.123, 1.123): 0.4353,
(11.123, 2.123): None,
(11.123, 3.123): 0.2568,
(12.123, 1.123): 0.7653,
(12.123, 2.123): None,
(12.123, 3.123): 1.456}
示例数据的期望输出是什么?您能否提供一个示例,说明使用此代码生成的dict是什么样子的,以及它应该是什么样子的?@bschlueter由于它输出的字典的大小,我只检查了几个点,注意到它们不匹配,因此我无法显示整个字典的外观,但我可以向您展示csv和该数据返回的字典。我向您展示此信息的最佳方式是什么?仅举一个简单的例子,例如您所包含的示例csv的预期结果就足够了。您的示例数据的期望输出是什么?您能否提供一个示例,说明使用此代码生成的dict是什么样的,它应该是什么样子?@bschlueter由于它输出的字典的大小,我只检查了几个点,注意到它们不匹配,所以我无法显示整个字典应该是什么样子,但我可以显示csv和该数据返回的字典。对于我来说,向您展示这些信息的最佳方式是什么?仅仅是一个简单的案例,比如您包含的示例csv的预期结果就足够了。人们能够用这么少的代码做这么多事情总是让我感到惊讶,很抱歉,我没有回复您关于输出的信息,但您展示的方式正是我要展示的。但是有一个问题,当我在我的csv上使用它时,它只对第一行执行此操作,你知道我将如何修复它吗?你的意思是,当给定不同的数据时,你只得到
{(10.123,1.123):无,(10.123,2.123):0.2345,(10.123,3.123):无}
或类似的东西吗?你必须提供更多的信息。可能是csv太大或损坏,因为此代码适用于提供的示例数据。如果这行得通,请随意接受和+1。人们用这么少的代码就能做这么多事情,这总是让我感到惊讶。很抱歉,我没有回复您关于输出的信息,但您展示的方式正是我要说的。但是有一个问题,当我在我的csv上使用它时,它只对第一行执行此操作,你知道我将如何修复它吗?你的意思是,当给定不同的数据时,你只得到{(10.123,1.123):无,(10.123,2.123):0.2345,(10.123,3.123):无}
或类似的东西吗?你必须提供更多的信息。可能是csv太大或损坏,因为此代码适用于提供的示例数据。如果这有效,请随意接受和+1。