基于csv切片Pandas DataFrame

时间:2014-06-15 08:20:26

标签: python csv pandas dataframe

让我们说我有一个像下面这样的Pandas DataFrame。

df = pd.DataFrame({'Name' : ['A','B','C'],
                'Country'  : ['US','UK','SL']})

  Country Name
0      US    A
1      UK    B
2      SL    C

我有一个像csv一样的人。

Name,Extended
A,Jorge
B,Alex
E,Mark
F,Bindu

我需要检查df['Name']是否在csv中,如果是,请获取"扩展"。 如果不是,我需要获得"姓名" 。所以我的预期输出就像是跟随。

 Country  Name  Extended
0      US    A  Jorge
1      UK    B  Alex
2      SL    C  C

以下显示了我到目前为止的尝试。

f = open('mycsv.csv','r')
lines = f.readlines()

def parse(x):
    for line in lines:
        if x in line.split(',')[0]:
            return line.strip().split(',')[1]

df['Extended'] = df['Name'].apply(parse)

 Name Country Extended
0  A  US Jorge
1  B  UK Alex
2  C  SL None

我无法弄清楚如何获得"姓名" for C at" Extended"(代码中else部分)?任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用" fillna"大熊猫的功能如下:

LDFLAGS

答案 1 :(得分:0)

您可以将csv作为df加载,然后使用where分配:

df['Name'] = df2['Extended'].where(df2['Name'] != df2['Extended'], df2['Name'])

所以我们在这里使用布尔条件来测试' Name'不等于'扩展'并使用该值,否则只需使用' Name'。

也是“扩展'总是与“姓名”不同或相同?如果是这样,为什么不直接将扩展值赋给数据帧:

df['Name'] = df2['Extended']

这会更简单。