dataframe生成自己的列名

时间:2017-04-28 08:11:13

标签: python pandas dataframe python-3.4

对于项目,我想创建一个脚本,允许用户多次输入值(如厘米的值)。为此,我考虑了一个while循环。 这些值需要存储在数据框中,该数据框将用于生成值的图形。 此外,用户无法输入最大nr个条目,因此必须为每个条目生成包含值的变量的名称(例如M1,M2,M3 ...... M n )。但是,数据框只包含一行(仅适用于用户输入值的特定情况)。

所以,我的问题归结为: 如何创建一个数据框(带有pandas),其中脚本为测量生成自己的列名,如M1,M2,M3,...... M n ,以便存储所有值。

我现在无法访问我的代码,但我创建了一个允许用户输入值的While循环,但我仍然坚持使用数据框和列部分。 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我同意@mischi,没有额外的背景,熊猫似乎有点矫枉过正,但这是另一种方法来创建你所描述的......

此代码提出了一种使用while循环和input()收集值的方法(您的while循环可能类似)。

colnames = []
inputs = []
counter = 0

while True:
    value = input('Add a value: ')
    if value == 'q':                # provides a way to leave the loop
        break
    else:
        key = 'M' + str(counter)
        counter += 1
        colnames.append(key)
        inputs.append(value)


from pandas import DataFrame

df = DataFrame(inputs, colnames)  # this creates a DataFrame with 
                                  # a single column and an index
                                  # using the colnames

df = df.T                         # This transposes the DataFrame to
                                  # so the indexes become the colnames

df.index = ['values']             # Sets the name of your row
print(df)

此脚本的输出如下所示......

Add a value: 1
Add a value: 2
Add a value: 3
Add a value: 4
Add a value: q

       M0 M1 M2 M3
values  1  2  3  4

答案 1 :(得分:0)

pandas似乎有点矫枉过正,但要回答你的问题。

假设您从用户收集数值并将其存储在列表中:

import numpy as np
import pandas as pd

values = np.random.random_integers(0, 10, 10)
print(values)
array([1, 5, 0, 1, 1, 1, 4, 1, 9, 6])

columns = {}
column_base_name = 'Column'

for i, value in enumerate(values):
    columns['{:s}{:d}'.format(column_base_name, i)] = value

print(columns)
{'Column0': 1,
 'Column1': 5,
 'Column2': 0,
 'Column3': 1,
 'Column4': 1,
 'Column5': 1,
 'Column6': 4,
 'Column7': 1,
 'Column8': 9,
 'Column9': 6}

df = pd.DataFrame(data=columns, index=[0])

print(df)     
   Column0  Column1  Column2  Column3  Column4  Column5  Column6  Column7  \
0        1        5        0        1        1        1        4        1   

   Column8  Column9  
0        9        6