Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 索引列和行返回不正确的值_Python_Csv_Pandas - Fatal编程技术网

Python 索引列和行返回不正确的值

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

我正在使用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(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。