使用pandas数据帧以CSV格式化子字段的脚本

时间:2015-01-15 15:33:30

标签: python pandas

好的,我知道在python / pandas中这很简单,但我还没有找到一个很好的例子。

CSV包含:

app_name, owners, App_servers, DB_Servers, databases
app1, bob;larry;alice, mars;jupiter, Gorp;Gulp, roadrunner
app2, jane, mercury, Glitch
app3, , venus; uranus, Glint, tweety
app4, jennifer,,,tweety;roadrunner
因此:始终是app_name,所有其他字段可能包含由分号分隔的多个值。

我需要将其归一化为2个文件:

app_name, owner
app_name, server, server_type # where server_type is either appsrv, dbsrv, dbstore

我在数据框中打开了文件,但无法找出解析和写入单独数据框的最佳方法。我怀疑有一些简单的方法可以使用map / apply来分割子字段,但我只是粗暴地用循环强制它(我是否提到了我对这一切的新内容?)。

我无法理解如何在输出数据帧中移动光标/记录指针。我已经通过构建记录和使用追加功能来接近,但它非常难看并且似乎没有按预期工作。我很确定我错过了一些显而易见的事情,比如通过地图/ appay / lambda函数来做这件事......但我还没有看到一个很好的例子,可能就是那个'不是要走的路。

到目前为止,这是我的代码(是的,我知道逻辑不起作用):

import pandas as pd
import numpy as np
pd.set_option('max_columns', 50)
cols = [omitted]
# idf is input data frame, odf is output data frame
idf = pd.read_csv('2014 App Inv.csv', skiprows=1, usecols=cols)
odf = pd.DataFrame(columns=['AppName','AltAppName','AppServer', 'DBServer','DBInstance','CIO'])
for i0 in idf:
    appname = idf["Asset Name"] #This is returning the entire column!
    cio = idf["App Owners"]
    y = split(idf["AppServers"],";")
    for i1 in y:
       x = split(idf["DB Servers"],";")
       for i2 in x:
           w = split(idf["Databases"],";")
           for i3 in w: 
                r = {appname, altappname, i1, i2, i3, cio}
                print r
                odf = odf.append(r, ignore_index=True)        

好的,我并没有要求任何人为我编写程序,但我无法理解最好/最简单/最简单的方法。我确定某处有一个例子,我只需要指出它。

一如既往,提前谢谢!

2 个答案:

答案 0 :(得分:0)

首先,我会进行所需的导入并打开CSV文件:

#!/usr/bin/python
import sys, string

filedescriptor1 = open("myfile.csv", 'r') 

然后,我只需浏览此文件描述符的每一行,并在逗号之间拆分。

for line in filedescriptor1:
    splitted = line.split(',') # here we splitting the line into pieces between ','
    app_name = splitted[0] # as it is the first field of the line
    owner = splitted[1] # second field...and most of the same for the rest fields        

从这一点开始,您只需在每个行的每个参数中写入一个文件或将其存储到一个数组中并在 的末尾打印它(或用它做任何你想做的事情)循环。

答案 1 :(得分:0)

好的,我一直搜索,直到找到一个例子,正如我所料,这很简单: :     #idf = pd.dataframe     对于idx,在idf中排。 iterrows ():#这让我循环遍历数据框

我真正需要的是了解如何移动光标(在SQL术语中)。

在我学习如何使用map / apply之前,循环遍历pandas数据帧就足够了。

良好的PANDAS培训:Alfred Essa 关于PANDAS的好短篇博文:Greg Reda