没有标题行的csv,如何从pandas.Series.from_csv切换到pandas.read_csv?

时间:2019-06-03 07:41:08

标签: python pandas

pandas.Series.from_csv已过时(从0.21版开始)。 我想更改代码以使用pandas.read_csv。 但是,我根本找不到在没有标题行的情况下为csv文件加载相同数据的变体。

例如,假设以下csv:

cntry,country
ctr,center
hts,heights
ft,fort
mt,mount
spg,springs
spgs,springs
st,saint
ter,terrace
e,east
w,west
s,south
n,north

以下不推荐使用的代码:

z1 = pd.Series.from_csv('file.csv')
type(z1)
z1.shape
z1

给我(在笔记本中执行):

pandas.core.series.Series
(13,)
cntry    country
ctr       center
hts      heights
ft          fort
mt         mount
spg      springs
spgs     springs
st         saint
ter      terrace
e           east
w           west
s          south
n          north
dtype: object

使用pandas.read_csv和以下各项的组合,我无法获得相同的结果:

  • index_col=0;
  • header=None;
  • parse_dates=True;
  • squeeze=True

例如:

z2 = pd.read_csv('file.csv',index_col=0,header=None,parse_dates=True,squeeze=True)
type(z2)
z2.shape
z2

给我:

pandas.core.series.Series
(13,)
0
cntry    country
ctr       center
hts      heights
ft          fort
mt         mount
spg      springs
spgs     springs
st         saint
ter      terrace
e           east
w           west
s          south
n          north
Name: 1, dtype: object

0中的差异。 .values.iteritems()中未显示。但是,我不了解它是什么,以及如何使用pandas.read_csv及其参数消除它。

更新

0-是索引的标题。可以使用.rename_axis(index=None)删除。

1-是系列标题。可以使用.rename()删除。

到目前为止,我还看不到如何使用pandas.read_csv来做到这一点。

2 个答案:

答案 0 :(得分:0)

您应该能够执行以下操作:

z1 = pd.read_csv('file.csv', header=None, names=['', 'values'], index_col=0)['values']

这会将文件读入数据帧,将第一列设置为索引,然后选择第二列(名为“值”)作为系列。

与您的示例的唯一区别是系列的名称将为“值”。如果不需要,您可以始终运行z1.name = None

答案 1 :(得分:0)

使用提供的解决方案几乎可以正常工作,但是对我而言,该索引是datetime索引,并且在开始时我具有NaT值。解决方法:

def load_pandas_series(filename):
    df1 = pd.read_csv(filename, index_col=0, names=['', 'values'],
                    header=None, parse_dates=True)['values']
    df1.name = None
    df1 = df1[~df1.index.isnull()]
    return df1