分享
三行代码  ›  专栏  ›  技术社区  ›  Junkrat

如何将用户输入的值附加到df的不同列中? - How to append user inputted values into different columns of a df?

  •  0
  • Junkrat  · 技术社区  · 4 周前

    我想创造一个 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 开始输入值。现在,我想将这些值添加到 东风 也是。我试过附加它,但它给了我以下错误:

    回溯(最近一次呼叫时间):

    文件“”,第13行,in 数据['id'].append(int(id_value))

    文件 “C:\users\kashy\anaconda3\envs\py36\lib\site packages\pandas\core\series.py”, 第2775行,追加 若要执行以下操作,请忽略索引=忽略索引,验证完整性=验证完整性

    文件 “C:\users\kashy\anaconda3\envs\py36\lib\site packages\pandas\core\reforme\concat.py”, 第255行,在concat中 排序=排序,

    文件 “C:\users\kashy\anaconda3\envs\py36\lib\site packages\pandas\core\reforme\concat.py”, 第332行 初始化 引发类型错误(消息)

    typeerror:无法连接“”类型的对象;仅 序列和数据帧对象是有效的

    例子:

    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
    

    从这些价值观来看, 东风 必须形成如下:

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

    怎么能做到?

    2 回复  |  直到 4 周前
        1
  •  2
  •   jezrael    4 周前

    你可以用克里特语词典和 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)
    
        2
  •  1
  •   Aryerez    4 周前

    输入使用后:

    data.loc[len(data)] = [int(id_value), int(qty_value), int(moa_value), int(tax_value)]
    
        3
  •  0
  •   ckedar    4 周前

    或者,追加空行,然后设置其列:

    while True:
        add_seg = input('Do you want to add a segment (Y/N)?: ')
        if (add_seg == 'Y')|(add_seg == 'y'):
            data = data.append({}, ignore_index=True)
            last_row = data.iloc[-1];
            for c in data.columns:
                last_row[c] = int(input(c))
        else:
            break