【问题标题】:Remove values when reading a csv and return to a list读取 csv 时删除值并返回列表
【发布时间】:2018-02-01 06:00:27
【问题描述】:

我有一个主题 XY 坐标的 csv 文件。如果 X 坐标小于 5,则某些 XY 已被删除。这可能适用于任何玩家,并且会随着时间而变化。 (参见示例数据集)。

在此文件的开头,P2、P7、P12、P17 已删除数据。虽然,在整个文件中,每个玩家都会丢失数据。对于大约 90% 的文件,在任何时间点都会有至少 4 个玩家丢失数据。

Frame Time  P1_X    P2_Y  P2_X P2_Y P3_X    P3_Y    P4_X    P4_Y    P5_X    P5_Y    P6_X     P6_Y P7_X P7_Y P8_X    P8_Y    P9_X    P9_Y    P10_X   P10_Y   P11_X   P11_Y P12_X P12_Y 
0   10:39.2 65.75   45.10           73.74   -3.52   61.91   41.80   67.07   -24.62  77.14   -22.98          93.95   3.51    56.52   28.44   70.21   11.06   73.08   -35.54          69.79   45.73   73.34   29.26   64.73   -40.69  70.90   6.11            70.94   -45.11  42.78   3.00    61.77   -1.05   72.07   38.62
1   10:39.3 65.77   45.16           73.69   -3.35   61.70   41.79   67.19   -24.59  77.17   -23.03          93.90   3.53    56.54   28.38   70.20   11.00   73.15   -35.48          69.79   45.86   73.20   29.30   64.96   -40.77  70.91   6.10            71.04   -45.29  42.84   3.02    61.82   -0.99   72.12   38.71
2   10:39.4 65.78   45.24           73.63   -3.17   61.70   41.79   67.32   -24.56  77.20   -23.05          93.83   3.55    56.59   28.31   70.20   10.92   73.20   -35.41          69.79   45.86   73.03   29.36   65.19   -40.84  70.91   6.10            71.15   -45.50  42.91   3.04    61.89   -0.91   72.16   38.80
3   10:39.5 65.78   45.33           73.57   -3.00   61.49   41.78   67.45   -24.50  77.25   -23.07          93.75   3.57    56.59   28.31   70.21   10.83   73.25   -35.33          69.77   46.01   72.86   29.43   65.45   -40.86  70.90   6.09            71.15   -45.50  43.01   3.08    61.98   -0.81   72.19   38.86
4   10:39.6 65.78   45.33           73.51   -2.86   61.32   41.76   67.45   -24.50  77.31   -23.09          93.64   3.60    56.65   28.22   70.23   10.72   73.29   -35.22          69.72   46.17   72.69   29.51   65.75   -40.84  70.88   6.08            71.24   -45.71  43.11   3.12    62.06   -0.70   72.22   38.90
5   10:39.7 65.75   45.44           73.51   -2.86   61.20   41.73   67.59   -24.37  77.38   -23.10          93.52   3.63    56.73   28.09   70.25   10.59   73.29   -35.22          69.68   46.33   72.49   29.60   66.06   -40.84  70.86   6.05            71.31   -45.91  43.22   3.14    62.13   -0.59   72.26   38.92
6   10:39.8 65.72   45.56           73.45   -2.72   61.08   41.71   67.72   -24.19  77.44   -23.12          93.39   3.69    56.80   27.91   70.27   10.45   73.34   -35.08          69.66   46.48   72.27   29.67   66.36   -40.87  70.86   6.01            71.39   -46.09  43.35   3.17    62.20   -0.47   72.29   38.93
7   10:39.9 65.72   45.56           73.34   -2.48   60.97   41.72   67.92   -23.76  77.51   -23.13          93.23   3.75    56.80   27.91   70.30   10.31   73.40   -34.76          69.64   46.63   72.01   29.74   66.62   -40.93  70.85   5.96            71.39   -46.09  43.51   3.18    62.27   -0.35   72.31   38.93
8   10:40.0 65.73   45.90           73.34   -2.48   60.86   41.72   67.92   -23.76  77.51   -23.13          93.05   3.80    56.91   27.47   70.30   10.31   73.40   -34.76          69.63   46.76   72.01   29.74   66.82   -41.06  70.83   5.88            71.53   -46.45  43.68   3.20    62.27   -0.35   72.29   38.92
9   10:40.1 65.73   46.09           73.29   -2.39   60.74   41.70   68.00   -23.52  77.60   -23.12          92.83   3.86    56.99   27.23   70.35   10.17   73.43   -34.58          69.64   46.88   71.72   29.80   66.99   -41.22  70.80   5.79            71.60   -46.63  43.86   3.23    62.34   -0.22   72.22   38.89
10  10:40.2 65.76   46.27           73.22   -2.32   60.60   41.65   68.07   -23.24  77.71   -23.05          92.83   3.86    57.14   26.98   70.43   10.05   73.47   -34.38          69.68   46.96   71.42   29.85   67.16   -41.38  70.77   5.70            71.64   -46.80  44.04   3.28    62.43   -0.08   72.13   38.86
11  10:40.3 65.81   46.43           73.12   -2.28   60.43   41.60   68.12   -22.93  77.83   -22.94          92.58   3.89    57.32   26.72   70.54   9.92    73.50   -34.16          69.75   46.99   71.08   29.89   67.16   -41.38  70.74   5.62            71.67   -46.96  44.21   3.33    62.54   0.09    72.03   38.84
12  10:40.4 65.87   46.58           72.98   -2.29   60.24   41.55   68.15   -22.57  77.94   -22.76          92.30   3.93    57.52   26.45   70.67   9.78    73.50   -33.91          69.85   47.00   70.72   29.91   67.31   -41.57  70.70   5.52            71.73   -47.15  44.37   3.40    62.66   0.24    72.03   38.84
13  10:40.5 65.91   46.69           72.80   -2.32   60.07   41.49   68.17   -22.18  78.01   -22.53          91.99   3.98    57.71   26.18   70.81   9.60    73.49   -33.68          69.97   47.03   70.33   29.92   67.45   -41.78  70.64   5.38            71.81   -47.35  44.37   3.40    62.80   0.40    71.96   38.81
14  10:40.6 65.94   46.80           72.60   -2.34   59.93   41.43   68.19   -21.77  78.05   -22.27          91.69   4.03    57.89   25.90   70.96   9.42    73.47   -33.47          70.10   47.09   69.93   29.93   67.54   -41.96  70.56   5.20            71.86   -47.53  44.54   3.50    62.98   0.58    71.91   38.77
15  10:40.7 65.95   46.93           72.36   -2.36   59.80   41.38   68.18   -21.32  78.08   -21.99          91.38   4.09    58.11   25.63   71.11   9.26    73.41   -33.26          70.24   47.15   69.50   29.91   67.58   -42.15  70.56   5.20            71.86   -47.69  44.54   3.50    63.16   0.77    71.91   38.77
16  10:40.8 65.93   47.09           72.10   -2.34   59.65   41.36   68.16   -20.86  78.11   -21.68          91.09   4.17    58.35   25.38   71.23   9.13    73.31   -33.05          70.38   47.20   69.07   29.84   67.56   -42.32  70.44   5.00            71.81   -47.84  45.00   3.79    63.34   0.97    71.80   38.60
17  10:40.9 65.92   47.23           71.85   -2.28   59.47   41.37   68.11   -20.41  78.11   -21.37          90.81   4.27    58.59   25.12   71.33   9.00    73.22   -32.84          70.52   47.26   68.63   29.75   67.47   -42.51  70.28   4.78            71.75   -47.97  45.26   3.94    63.52   1.14    71.73   38.46

因为缺少数据,所以我尝试读取 csv 文件。如果我删除了try: except: 函数,我会收到Type Error stating I couldn't convert string to float

 with open('NoBench.csv') as csvfile :    
    readCSV = csv.reader(csvfile, delimiter=',')
    n=0
    for row in readCSV :
        if n == 0 :
            n+=1
        try:
            visuals[0].append([float(row[3]),float(row[5]),float(row[7]),float(row[9]),float(row[11]),float(row[13]),float(row[15]),float(row[17]),float(row[19]),float(row[21]),float(row[23]),float(row[25]),float(row[27]),float(row[29]),float(row[31]),float(row[33]),float(row[35]),float(row[37]),float(row[39]),float(row[41]),float(row[43])])
            visuals[1].append([float(row[2]),float(row[4]),float(row[6]),float(row[8]),float(row[10]),float(row[12]),float(row[14]),float(row[16]),float(row[18]),float(row[20]),float(row[22]),float(row[24]),float(row[26]),float(row[28]),float(row[30]),float(row[32]),float(row[34]),float(row[36]),float(row[38]),float(row[40]),float(row[42])])
        except ValueError:
           continue

但是,当我使用此代码时,它仅在存在每一行数据时才将值返回到列表中。如前所述,这只发生在大约 10% 的文件中。我正在使用 xy 在每个点创建散点图,因此不能更改为 0,0,因为这将创建一个错误的数据点。如何更改代码以便在未删除玩家数据时返回 xy 值。

【问题讨论】:

  • 顺便说一句,您可以完全简化您的代码:list(map(float, row[2::2]))list(map(float, row[3::2]))
  • 但是,更重要的是,请发帖minimal reproducible example
  • P_2XP_2Y 列中是否有空单元格?
  • 可能只是做.append([float(x) if x else float('nan') for x in row[2::2]])
  • @juanpa.arrivillaga 你应该考虑回答,因为你所有的 cmets 都是解决方案的一部分。也不知道float('nan') 是一个东西,这比我的0.0 默认值更有意义。

标签: python list csv formatting


【解决方案1】:

您可以在循环之前定义自己的转换:

def convert_float(x);
    if x:            # equivalent to if x == ''
        return float(x)
    else:
        return 0.0   # or set the default value you expect to replace the missing data with.

结合@juanpa.arrivillaga's excellent suggestion,将visual.append 行更改为:

visual[0].append(list(map(convert_float, row[3::2]))
visual[1].append(list(map(convert_float, row[2::2]))

我也不确定你的 n+=1 行应该做什么......如果你只是想跳过第一行(标题),只需这样做:

def convert_float(x);
    if x:
        return float(x)
    else:
        return 0.0

for i, row in enumerate(readCSV):
    if n > 0:
        visual[0].append(list(map(convert_float, row[3::2]))
        visual[1].append(list(map(convert_float, row[2::2]))

【讨论】:

  • 对不起。我已经改变了问题,但我不能使用 0 因为我需要在每个时间点制作散点图。基本上每个时间点有21个玩家的XY。 3-4 将有 90% 的时间丢失。我不能用 0,0 替换这些值,因为这将在这个 xy 坐标处创建一个图。我只需要读取文件并返回列表而不更改为另一个值。
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2016-11-16
  • 2014-10-14
  • 2013-12-05
  • 2021-11-14
  • 2021-06-29
相关资源
最近更新 更多