csv 如何删除Freq:MS,名称:des,数据类型:pandas系列的int64?

vlurs2pr  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(76)

我有一些Pandas系列像result_ses。我想把所有的数据累积到一个字典中,并把数据保存在一个csv中。我使用Google Colab工作。但我正面临着从数据中删除一些不必要信息的麻烦。我的代码如下:

asd = {}

for prod in unique_products[:4]:
    asd[prod] = {}  # empty dictionary for each product
    asd[prod]['ses'] = result_ses 
    asd[prod]['des'] = result_des 

print(asd)

输出如下:

{'2-28-437': {'ses': 2021-05-01    16
                     2021-06-01    16
                     2021-07-01    16
                     Freq: MS, Name: ses, dtype: int64, 
              'des': 2021-05-01    14
                     2021-06-01    14
                     2021-07-01    13
                     Freq: MS, Name: des, dtype: int64}, 
  '2-2-329': {'ses': 2021-05-01    16
                     2021-06-01    16
                     2021-07-01    16
                     Freq: MS, Name: ses, dtype: int64, 
              'des': 2021-05-01    14
                     2021-06-01    14
                     2021-07-01    13
                     Freq: MS, Name: des, dtype: int64}, 
  '24-30-42-7400': {'ses': 2021-05-01    16
                           2021-06-01    16
                           2021-07-01    16
                           Freq: MS, Name: ses, dtype: int64, 
                    'des': 2021-05-01    14
                           2021-06-01    14
                           2021-07-01    13
                           Freq: MS, Name: des, dtype: int64}, 
  '2-53-1151': {'ses': 2021-05-01    16
                       2021-06-01    16
                       2021-07-01    16
                       Freq: MS, Name: ses, dtype: int64, 
                'des': 2021-05-01    14
                       2021-06-01    14
                       2021-07-01    13
                       Freq: MS, Name: des, dtype: int64}}

其中result_sesresult_des都是pandas序列,unique_products是字符串列表。

# if I type
result_ses.info() 
# I get 
<class 'pandas.core.series.Series'>
DatetimeIndex: 3 entries, 2021-05-01 to 2021-07-01
Freq: MS
Series name: ses
Non-Null Count  Dtype
--------------  -----
3 non-null      int64
dtypes: int64(1)
memory usage: 48.0 bytes

要查看result_ses I的内容,请键入print(result_ses)并获得:

2021-05-01    16
2021-06-01    16
2021-07-01    16
Freq: MS, Name: ses, dtype: int64 # I do not want this included in the csv

我不希望字典asd特别包括这两个额外的信息Freq:MS,名称:des,数据类型:int64,我只想要剩下的,这样我就可以在csv中得到想要的输出。使用下面的代码,我试图将数据保存在csv中,但它不是我想要的格式。

op_path = '/content/output/'
output_file_path = op_path + f'desired_output.csv'
ddf = pd.DataFrame.from_dict(asd, orient='index')
ddf.to_csv(output_file_path, index_label='Date')

我期待着得到最终的输出是一个像下面这样的csv。如何解决此问题?

qvk1mo1f

qvk1mo1f1#

您可以按DatetimeIndex以及sesdes的值创建列:

asd = {}
for prod in unique_products[:4]:
    asd[prod] = pd.DataFrame({'ses_date':result_ses.index, 
                              'ses_val':result_ses.to_numpy(),
                              'des_date':result_des.index, 
                              'des_val':result_des.to_numpy()})
df = pd.concat(asd)

对于按空格分隔的值,请使用:

asd = {}
for prod in unique_products[:4]:
    ses = (result_ses.index.astype(str) +' ' + result_ses.astype(str)).to_numpy()
    des = (result_des.index.astype(str)  +' ' + result_des.astype(str)).to_numpy()
    asd[prod] = pd.DataFrame({'ses':ses, 'des':des})

df = pd.concat(asd)

测试和解决方案运行良好:

result_ses = pd.Series([1,2,3], pd.date_range('2000-01-01', periods=3))
result_des = pd.Series([8,9,7], pd.date_range('2000-02-01', periods=3))

unique_products = ['2-28-437','2-2-329', '24-30-42-7400', '2-53-1151']

asd = {}
for prod in unique_products[:4]:
    ses = (result_ses.index.astype(str) +' ' + result_ses.astype(str)).to_numpy()
    des = (result_des.index.astype(str)  +' ' + result_des.astype(str)).to_numpy()
    asd[prod] = pd.DataFrame({'ses':ses, 'des':des})

df = pd.concat(asd)

df.to_csv(f'modified_output.csv')

,,ses,des
2-28-437,0,2000-01-01 1,2000-02-01 8
2-28-437,1,2000-01-02 2,2000-02-02 9
2-28-437,2,2000-01-03 3,2000-02-03 7
2-2-329,0,2000-01-01 1,2000-02-01 8
2-2-329,1,2000-01-02 2,2000-02-02 9
2-2-329,2,2000-01-03 3,2000-02-03 7
24-30-42-7400,0,2000-01-01 1,2000-02-01 8
24-30-42-7400,1,2000-01-02 2,2000-02-02 9
24-30-42-7400,2,2000-01-03 3,2000-02-03 7
2-53-1151,0,2000-01-01 1,2000-02-01 8
2-53-1151,1,2000-01-02 2,2000-02-02 9
2-53-1151,2,2000-01-03 3,2000-02-03 7

如果需要格式为Excel中的单独行:

result_ses = pd.Series([1,2,3], pd.date_range('2000-01-01', periods=3))
result_des = pd.Series([8,9,7], pd.date_range('2000-02-01', periods=3))
unique_products = ['2-28-437','2-2-329', '24-30-42-7400', '2-53-1151']

asd = {}
for prod in unique_products[:4]:
    ses = (result_ses.index.astype(str) +' ' + result_ses.astype(str)).to_numpy()
    des = (result_des.index.astype(str)  +' ' + result_des.astype(str)).to_numpy()
    asd[prod] = pd.DataFrame({'ses':ses, 'des':des})

df = pd.concat(asd).groupby(level=0).agg('\n'.join).rename_axis('Date').reset_index()

with pd.ExcelWriter('modified_output.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    cell_format = workbook.add_format({'text_wrap': True})
    worksheet.set_column('A:Z', cell_format=cell_format)

相关问题