显然,我试图声明一个空的数据框,然后在其中分配一些值
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: []
任何人都可以解释为什么即使我分配值也得到这个空的数据框。抱歉,如果我的问题有点基本
答案 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中创建了一个列:
df["a"] = 1234
print(df)
但是您从未将值添加到现有列“ a”中-f.e.通过使用字典(键:“ a”和值列表[1、2、3、4]:
df = pd.DataFrame({"a":[1, 2, 3, 4]})
print(df)
如果添加了值列表,则每个值都将获得一个索引条目。
答案 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]