Python:将值附加到数据框

时间:2020-08-05 09:11:44

标签: python pandas

显然,我试图声明一个空的数据框,然后在其中分配一些值

df = pd.DataFrame()
df["a"] = 1234
df["b"] = b # Already defined earlier
df["c"] = c # Already defined earlier
df["t"] = df["b"]/df["c"]

我得到以下输出:

Empty DataFrame
Columns: [a, b, c, t]
Index: []

任何人都可以解释为什么即使我分配值也得到这个空的数据框。抱歉,如果我的问题有点基本

4 个答案:

答案 0 :(得分:3)

我认为,您必须像这样初始化DataFrame。

df = pd.DataFrame(data=[[1234, b, c, b/c]], columns=list("abct"))

当您使DataFrame没有初始数据时,该DataFrame没有数据并且没有列。 因此,您无法附加任何我认为的数据。

答案 1 :(得分:3)

只需将这些值添加为列表,例如:

df["a"] = [123]

答案 2 :(得分:1)

您首先初始化了一个空的DataFrame:

# Initialising an empty dataframe
df = pd.DataFrame()

# Print the DataFrame
print(df)
  • 结果
    空DataFrame
    列:[]
    索引:[]

接下来,您在空的DataFrame中创建了一个列:

df["a"] = 1234
print(df)
  • 结果
    空的DataFrame
    列:[a]
    索引:[]

但是您从未将值添加到现有列“ a”中-f.e.通过使用字典(键:“ a”和值列表[1、2、3、4]:

df = pd.DataFrame({"a":[1, 2, 3, 4]})
print(df)
  • 结果:
    enter image description here

如果添加了值列表,则每个值都将获得一个索引条目。

答案 3 :(得分:0)

问题是表中的单元格需要行索引值和列索引值才能插入该单元格值。因此,您需要确定“ a”,“ b”,“ c”和“ t”是列索引还是行索引。

如果它们是列索引,那么您需要一个行索引(在下面的示例中为0)以及上面的内容:

df = pd.DataFrame()
df.loc[0, "a"] = 1234
df.loc[0, "b"] = 2 
df.loc[0, "c"] = 3

结果:

In : df
Out:
        a    b    c
0  1234.0  2.0  3.0

现在数据框中已有数据,您可以执行列操作(即,创建一个新列“ t”,并为每一行分配“ b”下相应项的值除以“ c”下相应项的值) ):

df["t"] = df["b"]/df["c"]

当然,您还可以为每个项目使用不同的索引,如下所示:

df = pd.DataFrame()
df.loc[0, "a"] = 1234
df.loc[1, "b"] = 2 
df.loc[2, "c"] = 3

结果:

In : df
Out:
        a    b    c
0  1234.0  NaN  NaN
1     NaN  2.0  NaN
2     NaN  NaN  3.0

但是您可以看到,尚未指定(行,列,值)元组的单元格现在为NaN。这意味着,如果您尝试df["b"]/df["c"],则会在尝试使用NaN值的线性运算时得到NaN值。

In : df["b"]/df["c"]
Out:
0   NaN
1   NaN
2   NaN
dtype: float64

相反,如果您想将项目插入一栏下。现在,您需要一个列标题(下面的0):

df = pd.DataFrame()
df.loc["a", 0] = 1234
df.loc["b", 0] = 2 
df.loc["c", 0] = 3

结果:

In : df
Out:
        0
a  1234.0
b     2.0
c     3.0

现在,在插入“ t”的值时,您需要准确指定要引用的单元格(请注意,熊猫不会像执行矢量化列操作一样执行矢量化行操作)。

df.loc["t", 0] = df.loc["b", 0]/df.loc["c", 0]