熊猫用日期时间列读取CSV

时间:2019-02-27 15:12:45

标签: pandas

我正在尝试读取这样的csv行:

order

如果我现在用test.values打印出这些值,我会得到这个数组:

headers = ['col1', 'col2', 'col3', 'col4','col5','col6']
dtypes = {'col1': 'int', 'col2': 'str', 'col3': 'str', 'col4': 'str','col5': 'str','col6': 'int'}
test = pd.read_csv("solution.csv", sep=',', header=None, names=headers, dtype=dtypes, date_parser = pd.to_datetime)

但是我需要将“ col4”作为datetime.date,因为我想将其与sql查询进行比较。 有一种简单的方法(最好是在阅读csv时)来做到这一点吗? 我可以将它作为时间戳取回,但对我来说这是没有用的,因为sql查询返回了datetime.date。

我正在寻找的解决方案应如下所示:

array([[107, 'Berg Live', 'Berg', '2017-01-08','Concert', 7]], dtype=object)

3 个答案:

答案 0 :(得分:0)

在我的末端进行本地测试。如果要在读取CSV本身的同时将其作为日期时间读取,则可以使用parse_dates

因此您可以这样做:

df = pd.read_csv("solution.csv", sep=',', header = None, names = headers, dtype = dtypes, parse_dates = ['col4'])

答案 1 :(得分:0)

>>> col_names = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6']
>>> dtypes = {'col1': int, 'col2': str, 'col3': str, 'col5': str, 'col6': int}
>>> date_cols = ['col4']
>>> df = pd.read_csv('solution.csv', names=col_names, parse_dates=date_cols)
>>> df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 6 columns):
col1    1 non-null int64
col2    1 non-null object
col3    1 non-null object
col4    1 non-null datetime64[ns]
col5    1 non-null object
col6    1 non-null int64
dtypes: datetime64[ns](1), int64(2), object(3)
memory usage: 128.0+ bytes
None

>>> df.head()

    col1    col2        col3    col4        col5        col6
0   107     Berg Live   Berg    2017-01-08  Concert     7

您可以使用dt访问器对获取DateTime属性的TimeStamp对象进行操作。

>>> df['col4'].dt

<pandas.core.indexes.accessors.DatetimeProperties object at 0x114d02518>

>>> df['col4'].dt.day_name()

0    Sunday
Name: col4, dtype: object

答案 2 :(得分:0)

您可以这样做:

smallMsms.apply(lambda row:
                       createRowMQ(row['peptide seq'],row['protein Entry'],row['mass error ppm'],row['evidenceID'],
                                   row['peptide modification'],row['Reverse'],row['Matches'],row['Intensities'],
                                   row['Mass Deviations [ppm]'],row['Intensity L'],row['Intensity M'],row['Intensity H']), axis=1)