如何遍历数据帧,将新字段添加到序列中,然后将该序列附加到CSV?

时间:2019-06-24 10:30:07

标签: python pandas loops csv dataframe

给出一个熊猫数据框,例如:

Name   Age
John   20
Mary   65
Bob    55

我希望遍历各行,确定每个人是否都是老年人(年龄> = 60),创建一个带有额外列的新条目,然后将其附加到一个csv文件中,以使它(csv文件) )的内容如下:

Name   Age  Senior
John   20   False
Mary   65   True
Bob    55   False

除了将数据保存到csv之外,我还可以通过将循环当前正在迭代的序列转到字典然后添加新密钥来完成其余工作。

for idx, e in records.iterrows():

        entry = e.to_dict()
        entry["senior"] = (entry["age"]<60)

仅将dict转换为series到dataframe并没有将其正确写入csv文件。有熊猫或非熊猫的方式可以完成这项工作吗?

重要编辑::上面是一个简化的示例,我正在处理数百行,并且我要添加的数据是一个长字符串,将在运行时创建 strong>,因此必须执行循环。另外,将其添加到原始数据帧不是一个选项,因为我敢肯定某个时刻我会耗尽程序内存(因此我无法将数据添加到原始数据帧,也无法创建包含所有信息的新数据帧)。 我不想将数据添加到原始数据框中,而仅添加到“行”的副本中,然后将其添加到csv中。

给出示例是为了为我的问题提供一些背景信息,但主要重点应该放在问题上,而不是示例上。

4 个答案:

答案 0 :(得分:2)

这里的循环不是必需的,只需通过与标量进行比较来分配新列,为避免在原始DataFrame中创建列,请使用DataFrame.assign-它会使用新列返回新的DataFrame,原始列为不变:

df1 = df.assign(senior = df["age"]>=60)

编辑:

如果确实需要循环(not recommended):

for idx, e in df.iterrows():
    df.loc[idx, "senior"] = e["Age"]>=60

print (df)
   Name  Age  senior
0  John   20   False
1  Mary   65    True
2   Bob   55   False

答案 1 :(得分:1)

使用np.where

import numpy as np
df1 = df.copy()
df1['Senior'] = np.where(df1['Age']>60,True,False)

答案 2 :(得分:1)

您还可以使用ge

df2 = df.copy()
df2['senior'] = df2['Age'].ge(60)

现在:

print(df2)

输出:

   Name  Age senior
0  John   20  False
1  Mary   65   True
2   Bob   55  False

答案 3 :(得分:0)

在这里找到了我需要的答案:Convert a dictionary to a pandas dataframe

代码:

first_entry=True
for idx, e in records.iterrows():

        entry = e.to_dict()
        entry["senior"] = (entry["age"]<60)
        df_entry = pd.DataFrame([entry], columns=entry.keys())

        df_entry.to_csv(output_path, sep=',', index=False, columns=header,header=first_entry,mode='a') 
        #output_path is a variable with path to csv, header is a variable with list of new column names
        first_entry=False

希望有一种更好的方法,但这可以正常工作。