Plotting a multiple column in Pandas (converting strings to floats)

烂漫一生 提交于 2019-12-11 05:34:57

问题


I'd like to plot "MJD" vs "MULTIPLE_MJD" for the data given here:: https://www.dropbox.com/s/cicgc1eiwrz93tg/DR14Q_pruned_several3cols.csv?dl=0

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import ast

filename = 'DR14Q_pruned_several3cols.csv'
datafile= path+filename
df = pd.read_csv(datafile)

df.plot.scatter(x='MJD', y='N_SPEC')
plt.show()

ser = df['MJD_DUPLICATE'].apply(ast.literal_eval).str[1]
df['MJD_DUPLICATE'] = pd.to_numeric(ser, errors='coerce')
df['MJD_DUPLICATE_NEW'] = pd.to_numeric(ser, errors='coerce')

df.plot.scatter(x='MJD', y='MJD_DUPLICATE')
plt.show()

This makes a plot, but only for one value of MJD_DUPLICATE::

print(df['MJD_DUPLICATE_NEW'])

0 55214 1 55209 ...

Thoughts??


回答1:


There are two issues here:

  1. Telling Pandas to parse tuples within the CSV. This is covered here: Reading back tuples from a csv file with pandas
  2. Transforming the tuples into multiple rows. This is covered here: Getting a tuple in a Dafaframe into multiple rows

Putting those together, here is one way to solve your problem:

# Following https://stackoverflow.com/questions/23661583/reading-back-tuples-from-a-csv-file-with-pandas
import pandas as pd
import ast
df = pd.read_csv("DR14Q_pruned_several3cols.csv",
                 converters={"MJD_DUPLICATE": ast.literal_eval})

# Following https://stackoverflow.com/questions/39790830/getting-a-tuple-in-a-dafaframe-into-multiple-rows
df2 = pd.DataFrame(df.MJD_DUPLICATE.tolist(), index=df.MJD)
df3 = df2.stack().reset_index(level=1, drop=True)

# Now just plot!
df3.plot(marker='.', linestyle='none')

If you want to remove the 0 and -1 values, a mask will work:

df3[df3 > 0].plot(marker='.', linestyle='none')



来源:https://stackoverflow.com/questions/46758107/plotting-a-multiple-column-in-pandas-converting-strings-to-floats

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!