Hướng dẫn pandas read excel keep date format - gấu trúc đọc excel giữ định dạng ngày

Python 2.7.10tred gấu trúc 0.17.1-Chức năng read_exceltried pyexcel 0.1.7 + pyexcel-xlsx 0.0.7-function get_records ()
Tried pandas 0.17.1 -- function read_excel
Tried pyexcel 0.1.7 + pyexcel-xlsx 0.0.7 -- function get_records()

Khi sử dụng gấu trúc trong Python, có thể đọc các tệp excel (định dạng: XLS, XLSX) và để các cột chứa các giá trị ngày hoặc ngày + thời gian là các chuỗi thay vì tự động chuyển đổi thành các loại datetime.datetime hoặc timestamp?date or date + time values as strings rather than auto-converting to datetime.datetime or timestamp types?

Nếu điều này là không thể sử dụng gấu trúc, ai đó có thể đề xuất một phương thức/thư viện thay thế để đọc các tệp XLS, XLSX và để lại các giá trị cột ngày làm chuỗi không?

Đối với giải pháp PANDAS, các loại cột df.info() và ngày kết quả được hiển thị bên dưới:pandas solution attempts the df.info() and resulting date column types are shown below:

>>> df.info()

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

Cố gắng/tiếp cận 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

Cố gắng/tiếp cận 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)

Và cũng đã thử thư viện PyExcel nhưng nó thực hiện hành vi chuyển đổi tự động tương tự:

Cố gắng/tiếp cận 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'])))
              )

IOSTR, byte, Excelfile, xlrd.book, đối tượng đường dẫn hoặc đối tượng giống như tệpstr, bytes, ExcelFile, xlrd.Book, path object, or file-like object

Bất kỳ đường dẫn chuỗi hợp lệ đều được chấp nhận. Chuỗi có thể là một url. Các sơ đồ URL hợp lệ bao gồm HTTP, FTP, S3 và Tệp. Đối với URL tệp, một máy chủ được dự kiến. Một tập tin cục bộ có thể là: file://localhost/path/to/table.xlsx.

Nếu bạn muốn vượt qua trong một đối tượng đường dẫn, Pandas chấp nhận bất kỳ os.PathLike nào.

Theo đối tượng giống như tệp, chúng tôi đề cập đến các đối tượng bằng phương thức read(), chẳng hạn như trình xử lý tệp (ví dụ: thông qua hàm tích hợp

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
0) hoặc
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
1.

sheet_namestr, int, danh sách hoặc không có, mặc định 0str, int, list, or None, default 0

Chuỗi được sử dụng cho tên trang. Số nguyên được sử dụng trong các vị trí tấm không chỉ số. Danh sách các chuỗi/số nguyên được sử dụng để yêu cầu nhiều tờ. Chỉ định không có để có được tất cả các tờ.

Các trường hợp có sẵn:

  • Mặc định là

    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: Bảng thứ nhất dưới dạng DataFrame

  • 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
    
    3: Bảng thứ 2 dưới dạng DataFrame

  • 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
    
    4: Bảng tải có tên

  • 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
    
    5: Tải đầu tiên, thứ hai và trang tính có tên

  • Không: Tất cả các tờ.

headerint, danh sách int, mặc định 0int, list of int, default 0

Hàng (0 chỉ số) để sử dụng cho các nhãn cột của khung dữ liệu được phân tích cú pháp. Nếu một danh sách các số nguyên được thông qua các vị trí hàng, các vị trí hàng sẽ được kết hợp thành một

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
6. Không sử dụng nếu không có tiêu đề.

tên tuổi giống như mặc định, không có gìarray-like, default None

Danh sách các tên cột để sử dụng. Nếu tệp không chứa hàng tiêu đề, thì bạn nên chuyển tiêu đề một cách rõ ràng = không có.

index_colint, danh sách int, không có mặc địnhint, list of int, default None

Cột (0 chỉ số) để sử dụng làm nhãn hàng của DataFrame. Không có nếu không có cột như vậy. Nếu một danh sách được thông qua, các cột đó sẽ được kết hợp thành

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
6. Nếu một tập hợp dữ liệu được chọn với
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
8, index_col dựa trên tập hợp con.

UsecolsInt, STR, Danh sách giống như hoặc có thể gọi mặc định khôngint, str, list-like, or callable default None
  • Nếu không, sau đó phân tích tất cả các cột.

  • Nếu str, sau đó chỉ ra danh sách phân tách dấu phẩy của các chữ cái và phạm vi cột Excel (ví dụ: A: E, hoặc A A, C, E: Fiêu). Phạm vi bao gồm cả hai bên.

  • Nếu danh sách INT, thì hãy chỉ ra danh sách các số cột được phân tích cú pháp.

  • Nếu danh sách chuỗi, sau đó chỉ ra danh sách các tên cột được phân tích cú pháp.

    Mới trong phiên bản 0.24.0.

  • Nếu có thể gọi được, sau đó đánh giá từng tên cột so với nó và phân tích cột nếu có thể gọi được trả về

    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
    
    9.

Trả về một tập hợp con của các cột theo hành vi ở trên.

Squeezebool, mặc định saibool, default False

Nếu dữ liệu được phân tích cú pháp chỉ chứa một cột thì hãy trả về một chuỗi.

Tên DTYPETYPE hoặc DIGNT của cột -> Loại, mặc định không cóType name or dict of column -> type, default None

Kiểu dữ liệu cho dữ liệu hoặc cột. Ví dụ. {‘A, Nếu các bộ chuyển đổi được chỉ định, chúng sẽ được áp dụng thay vì chuyển đổi DTYPE.

enginest, mặc định không cóstr, default None

Nếu IO không phải là bộ đệm hoặc đường dẫn, điều này phải được đặt để xác định IO. Các giá trị có thể chấp nhận được là không có

ConverterSdict, mặc định không códict, default None

Diễn ngôn của các chức năng để chuyển đổi các giá trị trong các cột nhất định. Các phím có thể là số nguyên hoặc nhãn cột, các giá trị là các hàm lấy một đối số đầu vào, nội dung ô Excel và trả về nội dung được chuyển đổi.

true_valuesList, mặc định không cólist, default None

Giá trị để xem là đúng.

false_valuesList, mặc định không cólist, default None

Giá trị để coi là sai.

skiprowslist-likelist-like

Hàng để bỏ qua ở đầu (0 chỉ số).

nrowsint, mặc định không cóint, default None

Số lượng hàng để phân tích cú pháp.

Mới trong phiên bản 0.23.0.

NA_VALUESSCALAR, STR, DANH SÁCH, HOẶC DINHscalar, str, list-like, or dict, default None

Các chuỗi bổ sung để nhận ra là NA/NAN. Nếu Dict vượt qua, các giá trị NA mỗi cột cụ thể. Theo mặc định, các giá trị sau được hiểu là nan: '', '#n/a', '#n/a n/a', '#na', '-1.#Ind', '-1.#Qnan', '-Nan', '-nan', '1.#ind', '1.#qnan', '', 'n/a', 'na', 'null', 'nan', 'n/a' , 'nan', 'null'.

keep_default_nabool, mặc định đúngbool, default True

Có hay không bao gồm các giá trị NAN mặc định khi phân tích dữ liệu. Tùy thuộc vào việc NA_Values ​​được thông qua, hành vi như sau:

  • Nếu keep_default_na là đúng và na_values ​​được chỉ định, na_values ​​được thêm vào các giá trị NAN mặc định được sử dụng để phân tích cú pháp.

  • Nếu keep_default_na là đúng và na_values ​​không được chỉ định, chỉ có các giá trị NAN mặc định được sử dụng để phân tích cú pháp.

  • Nếu keep_default_na là sai và na_values ​​được chỉ định, chỉ có các giá trị nan được chỉ định na_values ​​được sử dụng để phân tích cú pháp.

  • Nếu keep_default_na là sai và na_values ​​không được chỉ định, không có chuỗi nào được phân tích cú pháp là nan.

Lưu ý rằng nếu Na_Filter được truyền dưới dạng sai, các tham số keep_default_na và na_values ​​sẽ bị bỏ qua.

na_filterbool, mặc định đúngbool, default True

Phát hiện các điểm đánh dấu giá trị bị thiếu (chuỗi trống và giá trị của NA_Values). Trong dữ liệu mà không có NAS, việc truyền Na_Filter = Sai có thể cải thiện hiệu suất của việc đọc một tệp lớn.

verbosebool, mặc định saibool, default False

Chỉ ra số lượng giá trị Na được đặt trong các cột không phải là số.

Parse_datesbool, Danh sách giống như hoặc Dict, mặc định FALSEbool, list-like, or dict, default False

Hành vi như sau:

  • bool. Nếu đúng -> thử phân tích cú pháp chỉ mục.

  • Danh sách INT hoặc tên. ví dụ. Nếu [1, 2, 3] -> thử phân tích các cột 1, 2, 3 mỗi cột là một cột ngày riêng biệt.

  • Danh sách danh sách. ví dụ. Nếu [[1, 3]] -> Kết hợp các cột 1 và 3 và phân tích cú pháp là một cột ngày duy nhất.

  • Diễn ngôn, ví dụ: {‘Foo,

Nếu một cột hoặc chỉ mục chứa một ngày không thể tách rời, toàn bộ cột hoặc chỉ mục sẽ được trả về không thay đổi dưới dạng kiểu dữ liệu đối tượng. Nếu bạn không muốn phân tích một số ô như ngày, chỉ cần thay đổi loại của chúng trong Excel thành văn bản. Đối với phân tích dữ liệu không chuẩn, sử dụng

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)
0 sau
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)
1.

Lưu ý: Một đường dẫn nhanh tồn tại trong các ngày được định dạng ISO8601.

date_parserfunction, tùy chọnfunction, optional

Chức năng sử dụng để chuyển đổi một chuỗi các cột chuỗi thành một mảng các phiên bản DateTime. Mặc định sử dụng

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)
2 để thực hiện chuyển đổi. Pandas sẽ cố gắng gọi DATE_PARSER theo ba cách khác nhau, tiến sang cách tiếp theo nếu xảy ra ngoại lệ: 1) Truyền một hoặc nhiều mảng (theo định nghĩa của parse_dates) làm đối số; 2) Concatenate (hàng khôn ngoan) Các giá trị chuỗi từ các cột được xác định bởi parse_dates thành một mảng duy nhất và truyền cái đó; và 3) CALL DATE_PARSER một lần cho mỗi hàng bằng một hoặc nhiều chuỗi (tương ứng với các cột được xác định bởi parse_dates) làm đối số.

hàng ngàn, mặc định không cóstr, default None

Hàng ngàn phân tách để phân tích các cột chuỗi vào số. Lưu ý rằng tham số này chỉ cần thiết cho các cột được lưu trữ dưới dạng văn bản trong Excel, bất kỳ cột số nào sẽ tự động được phân tích cú pháp, bất kể định dạng hiển thị.

bình luận, không có mặc địnhstr, default None

Nhận xét ra phần còn lại của dòng. Chuyển một ký tự hoặc ký tự cho đối số này để chỉ ra nhận xét trong tệp đầu vào. Bất kỳ dữ liệu giữa chuỗi nhận xét và phần cuối của dòng hiện tại đều bị bỏ qua.

Skipfooterint, mặc định 0int, default 0

Hàng ở cuối để bỏ qua (0 chỉ số).

convert_floatbool, mặc định đúngbool, default True

Chuyển đổi phao tích phân sang int (tức là, 1.0 -> 1).Nếu sai, tất cả dữ liệu số sẽ được đọc dưới dạng phao: Excel lưu trữ tất cả các số dưới dạng nổi trong nội bộ.

manggle_dupe_colsbool, mặc định đúngbool, default True

Các cột trùng lặp sẽ được chỉ định là ‘X,‘ X.1 ,,Truyền sai sẽ khiến dữ liệu bị ghi đè nếu có tên trùng lặp trong các cột.

**kwdsoptionaloptional

Đối số từ khóa tùy chọn có thể được chuyển đến

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)
3.