Python 如何将数据从文本转换为CSV

Python 如何将数据从文本转换为CSV,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有文本文件data.txt,如下所示: 我已尝试使用python转换此文件 import pandas as pd df = pd.read_fwf('data.txt') df.to_csv('data.csv') 我希望获得如下所示的results data.csv: 我该怎么办?将numpy作为np导入 df['Gender']=np.where(df['male'].eq(1),'male','femal') df=df.drop(列={'male','memale'}) df.to

我有文本文件data.txt,如下所示:

我已尝试使用python转换此文件

import pandas as pd
df = pd.read_fwf('data.txt')
df.to_csv('data.csv')
我希望获得如下所示的results data.csv:

我该怎么办?

将numpy作为np导入
df['Gender']=np.where(df['male'].eq(1),'male','femal')
df=df.drop(列={'male','memale'})
df.to_csv('data.csv',index=False)
姓名性别
0巴渝男
1琼森男
2安娜女
您可以在保存到
csv
之前使用
idxmax()

df['Gender'] = df[['male', 'female']].idxmax(axis=1)
df = df.drop(columns=['male', 'female'])

只需替换和重命名即可

数据帧: 结果: 正在将数据帧保存到csv

>>> df = df.replace({ 0: "male", 1: "Female"}).drop(columns {'male'}).rename(columns={'female': 'Gender'})
>>> df.to_csv('data.csv', index=False)
您的CSV将如下所示,并以逗号分隔

$ cat data.csv
Name,Gender
bayu,male
jason,male
anna,Female
或者,只需使用
idxmax
df.assign
即可将值全部分配回nw列

>>> df.assign(Gender = df[['male','female']].idxmax(axis=1)).drop(columns={'male', 'female'})
    Name  Gender
0   bayu    male
1  jason    male
2   anna  female
2) 创建函数然后使用
apply
方法的另一种方法

 def setval(col):
   col = str(col)
   if col.startswith('0'):
     return  'Male'
   if col.startswith('1'):
     return  'Female'


>>> df.assign(Gender = df[ 'female'].apply(setval)).drop({"female", "male"}, axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female
3) 只是为了子孙后代。。 您可以创建一个dict,然后将dict映射到其中一列,并使用
df将新值分配到一个新列。assign
进一步删除不需要的列

在这里,您可以轻松地使用
map
replace
方法

>>> newVal = {0:'Male', 1: 'Female'}   # dictionary paired with key, values
a) 在下面的示例中,
axis=1
表示更新方法的列

>>> df.assign(Gender=df.female.map(newVal)).drop({'male', 'female'},axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female
b) 而在下面的示例中,我们明确提到它将应用于列,这是旧方法

>>> df.assign(Gender=df.female.map(newVal)).drop(columns={'male', 'female'})
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female
使用
。替换

>>> df.assign(Gender=df.female.replace(newVal)).drop({'male', 'female'},axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female

np的答案很好。其中
+1请接受最适合您的答案,这样它会从未答复的队列中清除,并帮助其他正在寻找相同解决方案的人。感谢@Joe的感谢。
>>> newVal = {0:'Male', 1: 'Female'}   # dictionary paired with key, values
>>> df.assign(Gender=df.female.map(newVal)).drop({'male', 'female'},axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female
>>> df.assign(Gender=df.female.map(newVal)).drop(columns={'male', 'female'})
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female
>>> df.assign(Gender=df.female.replace(newVal)).drop({'male', 'female'},axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female