Đầu vào là một bảng văn bản - một số cột là số và một số văn bản. Tôi có tập lệnh Python để chuyển đổi tệp văn bản này thành XLSX. Sau khi mở trong Excel hoặc Libre, tất cả các trường là văn bản. Có tùy chọn nào để chuyển đổi một số cột thành số không?
cat script.py:
import csv
import sys
from xlsxwriter.workbook import Workbook
# Add some command-line logic to read the file names.
tsv_file = sys.argv[1]
xlsx_file = sys.argv[2]
# Create an XlsxWriter workbook object and add a worksheet.
workbook = Workbook[xlsx_file]
worksheet = workbook.add_worksheet[]
# Create a TSV file reader.
tsv_reader = csv.reader[open[tsv_file, 'rb'], delimiter='\t']
# Read the row data from the TSV file and write it to the XLSX file.
for row, data in enumerate[tsv_reader]:
worksheet.write_row[row, 0, data]
# Close the XLSX file.
workbook.close[]
chạy script:
python script.py in.txt out.xlsx
Tôi muốn thay đổi tập lệnh để chuyển đổi một số cột thành văn bản và một số thành số và giữ định dạng XLSX. Có ý tưởng nào để làm việc này không?
Khi được hỏi ngày 10 tháng 5 năm 2017 lúc 20:10May 10, 2017 at 20:10
Bạn có thể sử dụng tùy chọn trình xây dựng
python script.py in.txt out.xlsx
2 XLSXWriter. Từ các tài liệu:2: Kích hoạt phương thứcpython script.py in.txt out.xlsx
4 để chuyển đổi các chuỗi thành các số, nếu có thể, sử dụngpython script.py in.txt out.xlsx
5 để tránh cảnh báo Excel về các số được lưu trữ dưới dạng văn bản. Mặc định này sai. Để kích hoạt tùy chọn này sử dụng:python script.py in.txt out.xlsx
workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
Example:
import xlsxwriter
workbook = xlsxwriter.Workbook['test.xlsx', {'strings_to_numbers': True}]
worksheet = workbook.add_worksheet[]
worksheet.write[0, 0, 'Hello']
worksheet.write[1, 0, '123'] # Write this string as a number.
workbook.close[]
Output:
Đã trả lời ngày 11 tháng 5 năm 2017 lúc 7:27May 11, 2017 at 7:27
JMCnamarajmcnamarajmcnamara
Phim huy hiệu vàng 35,4k66 gold badges84 silver badges97 bronze badges
6
Theo tài liệu, bạn cần thêm một định dạng số và sử dụng nó khi bạn viết các ô cần định dạng số.
# Add a number format for cells with money.
money = workbook.add_format[{'num_format': '$#,##0'}]
...
worksheet.write[row_idx, col_idx, your_value, money]
Xem Hướng dẫn 2: Thêm định dạng vào tệp XLSX
Đã trả lời ngày 10 tháng 5 năm 2017 lúc 21:01May 10, 2017 at 21:01
Laurent Laportelaurent LaporteLaurent LAPORTE
20,9K5 Huy hiệu vàng55 Huy hiệu bạc97 Huy hiệu Đồng5 gold badges55 silver badges97 bronze badges
Trong hướng dẫn ngắn này, chúng tôi sẽ học cách chuyển đổi dữ liệu văn bản hoặc chuỗi thành số trong gấu trúc.
Chúng tôi sẽ xem xét hai phương thức tích hợp gấu trúc để chuyển đổi chuỗi thành số. Cũng như làm thế nào để xử lý một số trường hợp đặc biệt khi hai phương pháp này không hoạt động.
Chạy mã sau để tạo DataFrame mẫu. Mỗi cột chứa văn bản/chuỗi và chúng tôi sẽ chuyển đổi chúng thành các số bằng các kỹ thuật khác nhau. Chúng tôi sử dụng danh sách hiểu để tạo một số danh sách các chuỗi, sau đó đưa chúng vào một khung dữ liệu.
import pandas as pd
import numpy as np
l1 = [f'10{i}' for i in range[10,30]]
l2 = [f'10{i}.{i}' for i in range[10,30]]
l3 = [f'1.0{i}.{i}' for i in range[10, 30]]
l4 = [f'1,0{i}' for i in range[10, 30]]
l5 = [f'$1,0{i}' for i in range[10, 30]]
l6 = [f'{i}%' for i in range[20]]
l7 = [f'{i}.{i}%' for i in range[20]]
l8 = [f'10{i}' if i%2 == 0 else 'asdf' for i in range[10,30]]
l9 = [f'$1,0{i}' if i%2 == 0 else 'asdf' for i in range[10,30]]
df = pd.DataFrame[{'l1':l1,
'l2':l2,
'l3':l3,
'l4':l4,
'l5':l5,
'l6':l6,
'l7':l7,
'l8':l8,
'l9':l9,
}]
Hãy xem qua 5 hàng đầu tiên của DataFrame bằng phương thức
python script.py in.txt out.xlsx
6. Hãy nhớ rằng tất cả các giá trị trong DataFrame là kiểu dữ liệu chuỗi.python script.py in.txt out.xlsx
6 method. Keep in mind that all the values in the dataframe are string data type.>>> df.head[]
l1 l2 l3 l4 l5 l6 l7 l8 l9
0 1010 1010.10 1.010.10 1,010 $1,010 0% 0.0% 1010 $1,010
1 1011 1011.11 1.011.11 1,011 $1,011 1% 1.1% asdf asdf
2 1012 1012.12 1.012.12 1,012 $1,012 2% 2.2% 1012 $1,012
3 1013 1013.13 1.013.13 1,013 $1,013 3% 3.3% asdf asdf
4 1014 1014.14 1.014.14 1,014 $1,014 4% 4.4% 1014 $1,014
Phương thức DF.Asype []
Đây có lẽ là cách dễ nhất. Chúng ta có thể lấy một cột các chuỗi sau đó buộc loại dữ liệu là số [nghĩa là số nguyên hoặc float].
Đối với cột đầu tiên, vì chúng tôi biết nó được cho là các số nguyên của người Hồi giáo, vì vậy chúng tôi có thể đặt
python script.py in.txt out.xlsx
7 vào phương pháp chuyển đổi python script.py in.txt out.xlsx
8.python script.py in.txt out.xlsx
7 in the python script.py in.txt out.xlsx
8 conversion method.>>> df['l1'].astype[int].head[]
0 1010
1 1011
2 1012
3 1013
4 1014
Name: l1, dtype: int32
Tuy nhiên,
python script.py in.txt out.xlsx
7 sẽ không hoạt động nếu dữ liệu chứa số thập phân. Trong trường hợp này, chúng ta cần chuyển workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
0 vào đối số phương thức.python script.py in.txt out.xlsx
7 will not work if the data contain decimals. In this case, we need to pass workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
0 into the method argument.>>> df['l2'].astype[float].head[]
0 1010.10
1 1011.11
2 1012.12
3 1013.13
4 1014.14
Name: l2, dtype: float64
Phương pháp này có vẻ dễ dàng để áp dụng, nhưng đó là khá nhiều tất cả những gì nó có thể làm - nó không hoạt động cho các cột còn lại. Lý do là các cột khác đều chứa một số loại ký tự đặc biệt như dấu phẩy [,], dấu đô la [$], tỷ lệ phần trăm [%], v.v. Rõ ràng, phương pháp
workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
1 không thể xử lý các ký tự đặc biệt đó.workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
1 method cannot handle those special characters.Phương thức pd.to_numeric []
Phương pháp này hoạt động tương tự như
workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
2 theo cách mà họ không nhận ra các ký tự đặc biệt như ký hiệu tiền tệ [$] hoặc hàng ngàn dấu phân cách [dấu chấm hoặc dấu phẩy].workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
2 in a way that they don’t recognize the special characters such as the currency symbols [$] or the thousand separators [dot or comma].Tuy nhiên, phương pháp này rất tiện lợi trong một số tình huống mà chúng ta cần làm sạch dữ liệu. Ví dụ: dữ liệu trong cột L8 là sự kết hợp của các số văn bản của Google [ví dụ: 1010 1010] và văn bản thực khác [ví dụ: ASDF ASDF]. Trong phương thức
workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
3, khi workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
4, mã sẽ chạy mà không gây ra lỗi nhưng sẽ trả về NAN cho các số không hợp lệ.workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
3 method, when workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
4, the code will run without raising errors but will return NaN for invalid numbers.Sau đó, chúng ta có thể thay thế các nan đó bằng các giá trị giả khác như 0.
>>> pd.to_numeric[df['l8'], errors = 'coerce']
0 1010.0
1 NaN
2 1012.0
3 NaN
4 1014.0
5 NaN
.....
>>> pd.to_numeric[df['l8'], errors = 'coerce'].replace[np.nan, 0]
0 1010.0
1 0.0
2 1012.0
3 0.0
4 1014.0
5 0.0
Dữ liệu chứa các ký tự đặc biệt
Đối với các cột có chứa các ký tự đặc biệt như dấu đô la, dấu tỷ lệ phần trăm, dấu chấm hoặc dấu phẩy, chúng ta cần xóa các ký tự đó trước khi chuyển đổi văn bản thành các số.
Chúng ta có thể sử dụng
workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
5 để truy cập toàn bộ cột chuỗi, sau đó thay thế các ký tự đặc biệt bằng phương pháp workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
6. Ví dụ:workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
5 to access an entire column of strings, then replace the special characters using the workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
6 method. For example:python script.py in.txt out.xlsx
0Đối số n = 1 ở trên có nghĩa là chúng ta chỉ thay thế lần xuất hiện đầu tiên [từ đầu chuỗi] của ‘. Theo mặc định, N được đặt thành -1, sẽ thay thế tất cả các lần xuất hiện.
Đừng nhầm lẫn
workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
6 với workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
8. Cái trước chỉ hoạt động trên chuỗi; trong khi đó, sau này hoạt động trên cả chuỗi hoặc số.workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
6 with workbook = xlsxwriter.Workbook[filename, {'strings_to_numbers': True}]
8. The former operates only on strings; whereas the latter works on either strings or numbers.Hãy để Lừa cũng làm sạch các cột khác:
python script.py in.txt out.xlsx
1Sau khi xóa tất cả các ký tự đặc biệt, bây giờ chúng ta có thể sử dụng df.Asype [] hoặc pd.to_numeric [] để chuyển đổi văn bản thành số.df.astype[] or pd.to_numeric[] to convert text to numbers.