将计算列添加到csv文件

时间:2017-05-03 18:15:18

标签: python csv pandas export-to-csv

我希望这不是一个经典的初学者问题。但是,我阅读并花了几天时间试图保存我的csv数据但没有成功。

我有一个使用我手动输入参数的函数。该函数生成3个我保存在CSV文件中的列。当我想将该函数与其他输入一起使用并保存从先前计算列右侧分配的新数据时,结果就是pandas将我的CSV文件按标题排列在3个单独的列中。

我正在使用下一个代码来保存我的数据:

data.to_csv('/Users/Computer/Desktop/Examples anaconda/data_new.csv', sep=',',mode='a')

结果是:

dot  lake     mock
1      42    11.914558
2      41    42.446977
3      40    89.188668
dot  lake     mock    
1      42    226.266513
2      41    317.768887
dot  lake     mock
3      42    560.171830
4.     41.   555.005333

我想要的是:

     dot  lake      mock        mock       mock
    0      42     11.914558. 226.266513. 560.171830
    1      41     42.446977. 317.768887. 555.005533
    2      40     89.188668  

更新: 我的DataFrame是使用如下函数生成的:

首先我打开了一个csv文件:

df1=pd.read_csv('current_state.csv')


def my_function(df1, photos, coords=['X', 'Y']):


        Hzs = t.copy()
        shifts = np.floor(Hzs / t_step).astype(np.int)
        ms = np.zeros(shifts.size)
        delta_inv = np.arange(N+1)
        dot = delta_inv[N:0:-1]
        lake = np.arange(1,N+1)


        for i, shift in enumerate(shifts):
            diffs = df1[coords] - df1[coords].shift(-shift)
            sqdist = np.square(diffs).sum(axis=1)
            ms[i] = sqdist.sum()
            mock = np.divide(ms, dot)


        msds = pd.DataFrame({'dot':dot, 'lake':lake, 'mock':mock})
        return msds

data = my_function(df1, photos, coords=['X', 'Y'])

print(data)        

data.to_csv('/Users/Computer/Desktop/Examples anaconda/data_new.csv', sep=',',mode='a'   

1 个答案:

答案 0 :(得分:0)

我找了好几天写入包含几个计算列的csv文件的方式,恰好是下一个。甚至有些人的不愉快的评论!我终于找到了如何做到这一点。如果有人需要类似的东西:

首先,我使用to_csv保存我的数据:

data.to_csv('/Users/Computer/Desktop/Examples/data_new.csv', sep=',',mode='a', index=False)

在已经使用标题生成文件之后,我删除了我不需要的索引,并且我只在最后使用该函数:

b = data
a = pd.read_csv('data_new.csv')
c = pd.concat ([a,b],axis=1, ignore_index=True)
c.to_csv('/Users/Computer/Desktop/Examples/data_new.csv', sep=',', index=False)

结果我得到了所需的CSV文件,可以随时调用该函数!