用csv文件中同一行的下一列的值填充行中的空值

2024-04-25 12:54:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这种DataFrame

name     surname       middle

Frank    Doe           NaN
John     Nan           Wood
Jack     Putt          Nan
Frank    Nan           Joyce

我想把“中间”的值移到“姓氏”列的同一行。我该怎么做?我尝试使用fillna方法,但没有结果。 这是我的密码:

import os
from pandas.io.parsers import read_csv


for csvFilename in os.listdir('.'):
   if not csvFilename.endswith('.csv'):
      continue
data=read_csv(csvFilename)
filtered_data["surname"].fillna(filtered_data["middle"].mean(),inplace=True)
filtered_data.to_csv('output.csv' , index=False)

Tags: csvfranknameimportmiddledataframereaddata
2条回答

我认为有一个更简单的方法:

df['surname'] = df['middle'].combine_first(df['surname'])
print(df)

输出:

    name surname middle
0  Frank     Doe    NaN
1   John    Wood   Wood
2   Jack    Putt    NaN
3  Frank   Joyce  Joyce

条件列翻转

使用^{},可以有条件地重新排列列。你知道吗

import pandas as pd
from cStringIO import StringIO

# Create fake DataFrame... you can read this in however you like
df = pd.read_table(StringIO('''
name     surname       middle
Frank    Doe           NaN
John     NaN           Wood
Jack     Putt          NaN
Frank    NaN           Joyce'''), sep='\s+')

print 'Original DataFrame:'
print df
print

# Assign the middle name to any surname with a NaN
df.loc[pd.isnull(df['surname']), 'surname'] = df[pd.isnull(df['surname'])]['middle']

print 'Manipulated DataFrame:'
print df
print

Original DataFrame:
    name surname middle
0  Frank     Doe    NaN
1   John     NaN   Wood
2   Jack    Putt    NaN
3  Frank     NaN  Joyce

Manipulated DataFrame:
    name surname middle
0  Frank     Doe    NaN
1   John    Wood   Wood
2   Jack    Putt    NaN
3  Frank   Joyce  Joyce

相关问题 更多 >