首页 > 解决方案 > 如何将用户输入的值附加到 df 的不同列中?

问题描述

我正在尝试df根据用户输入创建一个,如下所示:

import pandas as pd
data = pd.DataFrame(columns=['ID','QTY', 'MOA', 'TAX'])

while True:
    add_seg = input('Do you want to add a segment (Y/N)?: ')
    if (add_seg == 'Y')|(add_seg == 'y'):

        id_value = input('ID ')
        qty_value = input('QTY ')
        moa_value = input('MOA ')
        tax_value = input('TAX ')

        data['ID'].append(int(id_value))
        data['QTY'].append(int(qty_value))
        data['MOA'].append(int(moa_value))
        data['TAX'].append(int(tax_value))

    else:
        break

每当用户想要输入段时,他选择Y并开始输入值。现在,我也想将这些值添加到 adf中。我尝试附加它,但它给了我以下错误:

回溯(最近一次通话最后):

文件“”,第 13 行,在 data['ID'].append(int(id_value))

文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\series.py”,第 2775 行,附加到_concat,ignore_index=ignore_index,verify_integrity=verify_integrity

文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\reshape\concat.py”,第 255 行,concat sort=sort,

文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\reshape\concat.py”,第 332 行,在init raise TypeError(msg)

TypeError:无法连接类型“”的对象;只有 Series 和 DataFrame obj 是有效的

例子:

Do you want to add a segment (Y/N)?: y

ID 66

QTY 654

MOA 6565

TAX 6

Do you want to add a segment (Y/N)?: y

ID 656

QTY 61

MOA 65

TAX 64651

并且根据这些值,df必须形成如下:

ID    QTY    MOA    TAX
66    654   6565     6
656    61     65    64651

如何才能做到这一点?

标签: pythonpandas

解决方案


您可以克里特字典并使用DataFrame.append

import pandas as pd
data = pd.DataFrame(columns=['ID','QTY', 'MOA', 'TAX'])

while True:
    add_seg = input('Do you want to add a segment (Y/N)?: ')
    if (add_seg == 'Y')|(add_seg == 'y'):

        id_value = input('ID ')
        qty_value = input('QTY ')
        moa_value = input('MOA ')
        tax_value = input('TAX ')

        d = {'ID':int(id_value),'QTY':int(qty_value),'MOA':int(moa_value),'TAX':int(tax_value)}
        data = data.append(d, ignore_index=True)

    else:
        break

print (data)

另一个想法是使用python append和最后调用DataFrame构造函数创建字典列表:

L = []
while True:
    add_seg = input('Do you want to add a segment (Y/N)?: ')
    if (add_seg == 'Y')|(add_seg == 'y'):

        id_value = input('ID ')
        qty_value = input('QTY ')
        moa_value = input('MOA ')
        tax_value = input('TAX ')

        d = {'ID':int(id_value),'QTY':int(qty_value),'MOA':int(moa_value),'TAX':int(tax_value)}
        L.append(d)

    else:
        break

data = pd.DataFrame(L, columns=['ID','QTY', 'MOA', 'TAX'])
print (data)

推荐阅读