【问题标题】:add data to csv column wise using pandas使用 pandas 将数据添加到 csv 列
【发布时间】:2016-06-03 15:53:25
【问题描述】:

我有一些 csv 文件,我想从所有这些文件中复制一个特定的列,并将其保存在一个新的 csv 文件列中。但是下面的代码将它们添加到一个列中。

此外,我总共必须处理近 20M 数据,因此我不想将它们存储在单个数据帧中并最后保存。

这是我的代码:

import os 
import glob
import pandas as pd
k= glob.glob("*.csv")
colu="Close"
file="merged.csv"
temp_dirr="./temp/"
if not os.path.exists(temp_dirr):
    os.makedirs(temp_dirr)

filename=temp_dirr+file

df=pd.read_csv(k[0])[colu].dropna()
df.to_csv(filename,header=False,index=False)
for i in k[1:]:
    df=pd.read_csv(i)[colu].dropna()
    df.to_csv(filename,mode="a",header=False,index=False)

这是输出merged.csv文件

23.6 1065 23.45 1150 172.7 11098 11443.3

但我希望输出文件是这样的 23.6 172.7 1065 11098 23.45 11443.3 1150

这里的文件夹有 2 个 csv 文件,两列用于这 2 个文件的 "close" 列。那么如何按列添加呢?

【问题讨论】:

  • 你想如何合并你的文件?例如,每个文件的第一行应该“登陆”结果文件的第一行——如果你不使用.dropna(),它可能会起作用。如果不是,请说明您希望如何加入来自不同文件的数据
  • "close" 是那些 csv 文件的第 9 列,我需要这一列。现在第 9 列第 1 个文件位于结果 csv 文件的第 1 列,第 2 个文件的第 9 列位于结果的第 2 列,依此类推
  • 我在问 rows... 例如,在第一个文件中,第 9 列有这些值:1,2,NaN,3,4 和 file2 有:11,NaN,22,33,NaN - 你的结果文件应该是什么样子?
  • 好吧,列不相等,可能有 NaN 值,但它们都在最后。所以他们会填满第 1 行的列,比如 col 1 1,2 ,3 和 col2 1,2,3,4,5(并且 col 1 的最后 2 行将是空白的)

标签: python python-2.7 csv pandas


【解决方案1】:

你可以这样做:

def get_merged_csv(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], axis=1)

fmask = '*.csv'
# column numbers are starting from 0, so 9th column has index 8 
df = get_merged_csv(glob.glob(fmask), usecols=[8])
df.to_csv(filename,mode="a",header=False,index=False)

【讨论】:

  • 这个单一数据帧可以保存多长时间?因为我有 2K 个文件,每个文件都有近 5K 行数据
  • 这取决于您的内存以及您使用的是 32 位还是 64 位系统/Python/等。通常我在笔记本电脑上使用 10-14GB 的数据帧(RAM 16GB,Windows 7 64 位,Python 3.5 64 位)——没有任何问题。因此,即使在具有 3.5 GB RAM 限制的 32 位系统上,您的 20MB 也不应该成为问题
  • 不是 20MB,是 2000 万
  • 所有文件的总大小是多少?
  • 应该是usecols - 我已经相应地更新了我的答案
【解决方案2】:

我不确定如何使用 Pythond 做到这一点,但在 R 中,这很容易。

合并 File1 中的所有列和 File2 中的 Column12。

import pandas as pd
file1 = pd.read_table('C:\\Users\Users\\your_path_here\\Book1.csv', delimiter=',', header=None)
file2 = pd.read_table('C:\\Users\\Users\\your_path_here\\Book2.csv', delimiter=',', header=None)
file2_short = file2.ix[:,12:13]

#print (file2_short)
frames=[file1, file2_short]
new = pd.concat(frames)
new.to_csv('C:\\Users\\your_path_here\\newfile.csv')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    相关资源
    最近更新 更多