TypeError:无法将系列转换为<class'float'=“”> iterrows

时间:2018-03-04 22:00:04

标签: python pandas dataframe amazon-dynamodb boto3

我正在尝试让python从csv中读取一行,然后将内容放入DynamoDB,然后对每个后续行执行相同操作,直到结束。我修改了亚马逊的示例代码,使其如下所示:

from __future__ import print_function # Python 2/3 compatibility
import boto3
import decimal
import pandas as pd

dynamodb = boto3.resource('dynamodb', region_name='us-west-2', aws_access_key_id='123456789', aws_secret_access_key='987654321')

table = dynamodb.Table('Loyalty_One')

data = pd.read_csv('testdb.csv')
data[['collector_key']] = data[['collector_key']].astype(float)

for i, rows in data.iterrows():
    collector_key = float(data['collector_key'])
    sales = float(data['sales'])

    print("Adding data:", collector_key, sales)

    table.put_item(
        Item={
            'collector_key': collector_key,
            'sales': sales,
           }
       )

当我这样做时,我收到错误:TypeError:无法将系列转换为

你可以在这里看到这个文件,这没什么不同寻常的: https://s3.amazonaws.com/vshideler-data/testdb.csv

在我看来,第16行(和第17行)应该提取列中每行的内容。我认为标题可能会干扰但是使用“header = None”执行pd.read_csv只会让我产生一个不同的错误。

(虽然我觉得我可能只使用原始数据帧而不是csv文件)

1 个答案:

答案 0 :(得分:0)

我希望这会有所帮助。

如果项目的类型是系列并且有一个数字。您可以使用常规转换来转换类型。

例如,您可以像这样投射...

XX=AA[AA.SHOUT="HAHA"]["TYPE"] # Get the Type column and find value...
XX=float(XX) if len(XX)==1 else np.NaN
print(XX)

在真正的严肃代码中,您必须检查更多的异常,但是对于有限的情况,这将是转换数据的最简单方法。

祝你好运