我如何创建一个空DataFrame,然后添加行,一个接一个?
我创建了一个空DataFrame:
df = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
然后我可以在最后添加一个新行,并填充一个字段:
df = df._set_value(index=len(df), col='qty1', value=10.0)
它一次只适用于一个领域。向df中添加新行有什么更好的方法?
我如何创建一个空DataFrame,然后添加行,一个接一个?
我创建了一个空DataFrame:
df = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
然后我可以在最后添加一个新行,并填充一个字段:
df = df._set_value(index=len(df), col='qty1', value=10.0)
它一次只适用于一个领域。向df中添加新行有什么更好的方法?
当前回答
与ShikharDua的答案(基于行)中的字典列表不同,我们也可以将我们的表表示为一个列表字典(基于列),其中每个列表按行顺序存储一列,前提是我们事先知道我们的列。最后,我们构造一次DataFrame。
在这两种情况下,字典键始终是列名。行顺序隐式存储为列表中的order。对于c列和n行,它使用一个c个字典列表,而不是一个n个字典列表。字典列表方法让每个字典冗余地存储所有键,并且需要为每一行创建一个新字典。这里我们只追加到列表中,这总体上是相同的时间复杂度(向列表和字典中添加条目都是平摊常数时间),但由于操作简单,开销可能更小。
# Current data
data = {"Animal":["cow", "horse"], "Color":["blue", "red"]}
# Adding a new row (be careful to ensure every column gets another value)
data["Animal"].append("mouse")
data["Color"].append("black")
# At the end, construct our DataFrame
df = pd.DataFrame(data)
# Animal Color
# 0 cow blue
# 1 horse red
# 2 mouse black
其他回答
你可以使用pandas.concat()。有关详细信息和示例,请参见合并、连接和连接。
例如:
def append_row(df, row):
return pd.concat([
df,
pd.DataFrame([row], columns=row.index)]
).reset_index(drop=True)
df = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
new_row = pd.Series({'lib':'A', 'qty1':1, 'qty2': 2})
df = append_row(df, new_row)
您可以为此连接两个数据框架。我基本上遇到了这个问题,用字符索引(不是数字)向现有的DataFrame添加新行。
因此,我在一个管道()中输入新行数据,并在一个列表中索引。
new_dict = {put input for new row here}
new_list = [put your index here]
new_df = pd.DataFrame(data=new_dict, index=new_list)
df = pd.concat([existing_df, new_df])
与ShikharDua的答案(基于行)中的字典列表不同,我们也可以将我们的表表示为一个列表字典(基于列),其中每个列表按行顺序存储一列,前提是我们事先知道我们的列。最后,我们构造一次DataFrame。
在这两种情况下,字典键始终是列名。行顺序隐式存储为列表中的order。对于c列和n行,它使用一个c个字典列表,而不是一个n个字典列表。字典列表方法让每个字典冗余地存储所有键,并且需要为每一行创建一个新字典。这里我们只追加到列表中,这总体上是相同的时间复杂度(向列表和字典中添加条目都是平摊常数时间),但由于操作简单,开销可能更小。
# Current data
data = {"Animal":["cow", "horse"], "Color":["blue", "red"]}
# Adding a new row (be careful to ensure every column gets another value)
data["Animal"].append("mouse")
data["Color"].append("black")
# At the end, construct our DataFrame
df = pd.DataFrame(data)
# Animal Color
# 0 cow blue
# 1 horse red
# 2 mouse black
可以使用ignore_index选项将单行追加为字典。
>>> f = pandas.DataFrame(data = {'Animal':['cow','horse'], 'Color':['blue', 'red']})
>>> f
Animal Color
0 cow blue
1 horse red
>>> f.append({'Animal':'mouse', 'Color':'black'}, ignore_index=True)
Animal Color
0 cow blue
1 horse red
2 mouse black
我想出了一个简单而美好的方法:
>>> df
A B C
one 1 2 3
>>> df.loc["two"] = [4,5,6]
>>> df
A B C
one 1 2 3
two 4 5 6
请注意评论中提到的性能警告。