Python2.7.10
尝试了熊猫0.17.1 --功能read_excel
试用了pyexcel 0.1.7 +pyexcel-xlsx0.0.7-函数get_records()
在Python中使用熊猫时,是否可以读取excel文件(格式: xls、xlsx),并保留包含date或date + time值的列作为字符串而不是到datetime.datetime或timestamp类型?
如果这是不可能的使用熊猫,有人能建议一个替代的方法/库读取xls,xlsx文件,并保留日期列值为字符串?
对于熊猫解决方案尝试,df.info()和生成的日期列类型如下所示:
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 117 entries, 0 to 116
Columns: 176 entries, Mine to Index
dtypes: datetime64[ns](2), float64(145), int64(26), object(3)
memory usage: 161.8+ KB
>>> type(df['Start Date'][0])
Out[6]: pandas.tslib.Timestamp
>>> type(df['End Date'][0])
Out[7]: pandas.tslib.Timestamp尝试/方法1:
def read_as_dataframe(filename, ext):
import pandas as pd
if ext in ('xls', 'xlsx'):
# problem: date columns auto converted to datetime.datetime or timestamp!
df = pd.read_excel(filename) # unwanted - date columns converted!
return df, name, ext尝试/方法2:
import pandas as pd
# import datetime as datetime
# parse_date = lambda x: datetime.strptime(x, '%Y%m%d %H')
parse_date = lambda x: x
elif ext in ('xls', 'xlsx', ):
df = pd.read_excel(filename, parse_dates=False)
date_cols = [df.columns.get_loc(c) for c in df.columns if c in ('Start Date', 'End Date')]
# problem: date columns auto converted to datetime.datetime or timestamp!
df = pd.read_excel(filename, parse_dates=date_cols, date_parser=parse_date)并且也尝试了pyexcel库,但是它做了相同的自动魔术转换行为:
尝试/方法3:
import pyexcel as pe
import pyexcel.ext.xls
import pyexcel.ext.xlsx
t0 = time.time()
if ext == 'xlsx':
records = pe.get_records(file_name=filename)
for record in records:
print("start date = %s (type=%s), end date = %s (type=%s)" %
(record['Start Date'],
str(type(record['Start Date'])),
record['End Date'],
str(type(record['End Date'])))
)发布于 2018-03-07 19:00:28
我遇到了一个同样的问题,除了熊猫奇怪地只把一些细胞转换成日期时间。最后,我手动将每个单元格转换为如下所示的字符串:
def undate(x):
if pd.isnull(x):
return x
try:
return x.strftime('%d/%m/%Y')
except AttributeError:
return x
except Exception:
raise
for i in list_of_possible_date_columns:
df[i] = df[i].apply(undate)发布于 2019-12-11 19:20:49
我尝试了saving the file in a CSV UTF-8 format (手动),使用了pd.read_csv(),并且工作得很好。
我尝试了很多东西,想用read_excel来解决同样的问题。对我没什么用。因此,我猜想read_excel可能正在更新您无法控制的datetime对象中的字符串。
发布于 2016-12-13 09:09:22
pandas.read_excel(xlsx, sheet, converters={'Date': str})df['Date'][0].strftime('%Y/%m/%d')https://stackoverflow.com/questions/34156830
复制相似问题