如何忽略数据框中的空列?(熊猫)

时间:2021-02-12 09:58:55

标签: python python-3.x pandas dataframe numpy

我想忽略数据框中的空列。

例如:

样本.csv

Id  Name  Address    Contact   Item   Rate Qty  Price
1   Mark  California 98429102  Shirt  57    2    8
2   Andre Michigan   92010211

我试过了:

import pandas as pd
df = pd.read_csv('sample.csv')
df = df.fillna('')

df.to_csv('sample.txt',sep='*',index=False, header=False)

sample.txt 看起来像

1*Mark*California*98429102*Shirt*57*2*8
2*Andre*Michigan*92010211****

我想删除这里的空列。 sample.txt 应如下所示:

1*Mark*California*98429102*Shirt*57*2*8
2*Andre*Michigan*92010211

2 个答案:

答案 0 :(得分:2)

只需使用内存缓冲区和 strip()

import io
df = pd.read_csv(io.StringIO("""1*Mark*California*98429102*Shirt*57*2*8
2*Andre*Michigan*92010211****"""), sep="*", header=None)

with open("sample.csv", "w") as f: 
    f.write("\n".join([l.strip("*") for l in df.to_csv(sep="*",header=None, index=None).split("\n")]))

with open("sample.csv") as f: print(f.read())

输出

1*Mark*California*98429102*Shirt*57.0*2.0*8.0
2*Andre*Michigan*92010211

答案 1 :(得分:1)

怎么样

sep = '*'
df.applymap(str).apply(
  # axis=1, func=lambda s: sep.join(el for el in s if el)  # Removes all empty fields
    axis=1, func=lambda s: sep.join(s).strip('*')  # Removes trailing fields
).to_csv(
    'sample.txt', index=False, header=False
)