如何在 python 中的 csv 中导入 3D table?

How do I import a 3D table in csv in python?

我必须导入 3 维 table 数据才能在我的 Python 脚本中对其进行操作。

我拥有的 3 个维度是:

  1. 覆盖范围
  2. 年龄
  3. 高级

覆盖范围行和年龄列不固定,这意味着我可能比下面的示例更多或更少。

我当前的测试数据看起来像这样 (FWD_FIXED_5YRS.csv);

COVERAGE    Age 18  Age 20  Age 25  Age 30  Age 35  Age 40  Age 45  Age 50  Age 55  Age 60
50000.00    53.00   53.00   53.00   53.00   55.50   67.50   82.50   129.00  175.50  288.50
100000.00   54.00   54.00   54.00   60.00   74.00   117.00  146.00  198.00  331.00  536.00
150000.00   78.50   78.50   81.00   90.00   111.00  169.50  219.00  307.50  496.50  804.00
200000.00   108.00  108.00  108.00  120.00  148.00  222.00  292.00  410.00  662.00  1027.00
250000.00   87.50   87.50   90.00   102.50  124.00  165.00  235.00  350.00  557.50  1215.00
300000.00   105.00  105.00  108.00  123.00  147.00  198.00  282.00  420.00  669.00  1458.00
....
....

我尝试了另一个 qn 的东西,但我似乎只得到前几列:

import csv

with open('FWD_FIXED_5YRS.csv', 'r') as f:
    obj = csv.reader(f)
    X, Y, Z = [], [], []
    for i,row in enumerate(obj):
        if i>0:
             xstring = row[0]
             ystring = row[1]
             zstring= row[2]
             print (xstring, ystring, zstring)

这可以使用 pandas 模块轻松完成。 如果您可以使用 pandas 模块,您可以按如下方式读取您的 csv。

import pandas as pd
df = pd.read_csv('FWD_FIXED_5YRS.csv', sep='\t', index_col='COVERAGE')
df

它会给出以下结果,

            Age 18  Age 20  Age 25  Age 30  Age 35  Age 40  Age 45  Age 50  Age 55  Age 60
COVERAGE                                        
50000.0     53.0    53.0    53.0    53.0    55.5    67.5    82.5    129.0   175.5   288.5
100000.0    54.0    54.0    54.0    60.0    74.0    117.0   146.0   198.0   331.0   536.0
150000.0    78.5    78.5    81.0    90.0    111.0   169.5   219.0   307.5   496.5   804.0
200000.0    108.0   108.0   108.0   120.0   148.0   222.0   292.0   410.0   662.0   1027.0
250000.0    87.5    87.5    90.0    102.5   124.0   165.0   235.0   350.0   557.5   1215.0
300000.0    105.0   105.0   108.0   123.0   147.0   198.0   282.0   420.0   669.0   1458.0

您只访问了每行中的前 3 个元素。

         xstring = row[0]
         ystring = row[1]
         zstring= row[2]

如果您打算在阅读 csv 时打印每个年龄段的覆盖范围,例如

50000.00 Age 18 53.00

50000.00 Age 20 53.00

50000.00 Age 25 53.00

要保留 header(第一行)和第一列,

reader = csv.DictReader(fp)
for row in reader:
    coverage = row.pop('COVERAGE')
    for age, premium in row.items():
        print( coverage, age, premium)