【问题标题】:How to transform this file using pandas?如何使用熊猫转换这个文件?
【发布时间】:2019-04-26 19:17:57
【问题描述】:

你好,我有这个文件:

a|b|c|d|
1.05 january february 05-02-2010 Linux Mint
3.458 november december 05-02-2010 Windows 10

我想使用带有 Python 的 pandas 像这样在 csv 中转换这个文件:

a;b;c;d
1.05;january february;05-02-2010;Linux Mint
3.458;november december;05-02-2010;Windows 10

我真的不知道要这样做...你能帮帮我吗?

谢谢!

【问题讨论】:

  • 那么,你的出发点是什么指示一个管道分隔的文件,然后是空格分隔符行,没有转义表示“一月二月”应该是一列而不是两列? pandas 在这里不会为您提供帮助...您必须弄清楚如何识别这些列或修复输入文件的一些逻辑。
  • 你知道这个文件的内容结构吗?例如,“c”列总是类似日期的字符串。
  • df.to_csv(fname, separator=';'),阅读更多here
  • 您可能需要进行行解析以找到日期、格式,然后根据前面有一列的知识,将之后的所有内容加入到日期作为一列,然后将之后的所有内容将日期作为另一列...但是这是否适合您或规模... 耸耸肩...虽然不是熊猫问题。
  • @Ken 您假设您可以将输入转换为可行的格式 - 这里看起来不是这种情况。

标签: python pandas python-2.7 data-science data-analysis


【解决方案1】:

你可以这样做:

In [212]: df = pd.read_csv('ff.txt', skiprows=1, header=None, sep=' ')
In [211]: df
Out[211]: 
       0         1         2           3        4     5
0  1.050   january  february  05-02-2010    Linux  Mint
1  3.458  november  december  05-02-2010  Windows    10

In [232]: df['months'] = df[1].map(str) +' '+ df[2]

In [233]: df['end_cols'] = df[4].map(str) +' '+ df[5]

In [237]: df.drop([1,2,4,5], axis=1, inplace=True)

In [238]: df = df[[0,'months',3,'end_cols']]

In [239]: df
Out[239]: 
       0             months           3    end_cols
0  1.050   january february  05-02-2010  Linux Mint
1  3.458  november december  05-02-2010  Windows 10

#Now, extract header from original file
In [216]: with open('ff.txt', 'r') as f:
     ...:     header = f.readline()

In [217]: header
Out[217]: 'a|b|c|d\n'

In [245]: df.columns = header.strip().split('|')

# write the data to the file with delimiter =';'
In [224]: df.to_csv('abc.csv', sep=';', index=False)

#Final Output

mayankp@mayank:~/$ cat abc.csv 
a;b;c;d
1.05;january february;05-02-2010;Linux Mint
3.458;november december;05-02-2010;Windows 10

【讨论】:

  • @PeterH 如果答案对你有用,请告诉我?
【解决方案2】:

我不清楚你的意思是在内存中转换,还是写回文件。

如果是后者,您可能正在寻找

df.to_csv(out_df='filename', sep=';')

  • 结合其他答案中提到的一些列标签操作

【讨论】:

    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 2021-04-27
    • 2021-05-31
    • 2021-07-20
    • 2018-02-08
    • 1970-01-01
    • 2014-01-04
    • 2018-12-06
    相关资源
    最近更新 更多