Tôi muốn chuyển đổi dữ liệu 'byte' thành một khung dữ liệu gấu trúc.
Dữ liệu trông như thế này [một vài dòng đầu tiên]:
[b'#Settlement Date,Settlement Period,CCGT,OIL,COAL,NUCLEAR,WIND,PS,NPSHYD,OCGT'
b',OTHER,INTFR,INTIRL,INTNED,INTEW,BIOMASS\n2017-01-01,1,7727,0,3815,7404,3'
b'923,0,944,0,2123,948,296,856,238,\n2017-01-01,2,8338,0,3815,7403,3658,16,'
b'909,0,2124,998,298,874,288,\n2017-01-01,3,7927,0,3801,7408,3925,0,864,0,2'
b'122,998,298,816,286,\n2017-01-01,4,6996,0,3803,7407,4393,0,863,0,2122,998'
Các tiêu đề cột xuất hiện ở đầu. Mỗi dòng tiếp theo là một dấu thời gian và số.
Có một cách đơn giản để làm điều này?
Cám ơn rất nhiều
@Paula Livingstone:
Điều này có vẻ hoạt động:
s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
Có lẽ điều này có thể được thực hiện mà không cần sử dụng một tệp ở giữa.
Tôi hoàn toàn đồng ý với @jzwinck. Làm thế nào bạn có thể biện minh cho việc rò rỉ hệ thống mã hóa Python, thành một định dạng trao đổi dữ liệu chung?
Khi bạn sử dụng
s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
0 và chuỗi loại giao thức mảng s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
1 Tripping tròn sẽ bị rối tung lên:import pandas as pd
fname = './blah.csv'
pd.Series[[b'x',b'y']].to_csv[fname]
>>> pd.read_csv[fname, dtype='S5']
0 b'x'
0 b'1' b"b'y'"
Sử dụng
s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
2 hoặc s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
3 có hoạt động như mong đợi không?>>> pd.read_csv[fname, dtype='S']
0 b'x'
0 1 b'y'
Tôi thực sự thậm chí còn tìm thấy ^ bất ngờ vì nó dường như tự động diễn giải như các chuỗi Python?
Nếu người dùng chọn tải dữ liệu CSV dưới dạng
s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
4, nó sẽ được chỉ định rõ ràng giống như nó hoạt động khi bạn viết Unicode và không được suy ra từ đánh dấu cụ thể mã hóa Python.not inferred from python’s encoding specific markup:>>> pd.Series[['x', 'y']].to_csv[fname]
>>> pd.read_csv[fname]
0 x
0 1 y
>>> >>> pd.read_csv[fname, dtype='S10']
0 b'x'
0 1 b'y'
Nếu bạn nhận được đầu vào nhị phân của dữ liệu có cấu trúc bảng, bạn có thể chuyển đổi nó thành CSV một cách dễ dàng bằng cách sử dụng cắt Ví dụ: giả sử bạn có định dạng byte sau trong mã Python của bạn [ví dụ: được trả về bởi API hoặc đọc từ tệp nhị phân]: Cấu trúc tiền tố
5 để loại bỏ trình bao bọc byte s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
6 và áp dụng s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
7 trên kết quả để thay thế các ký tự bảng bằng dấu phẩy.s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
Xây dựng vấn đề
b'Name\tProfession\tAge\tIncome\nAlice\tProgrammer\t26\t88000\nBob\tEngineer\t21\t33000\nCarl\tStudent\t19\t-12000'
6 cho thấy nó thuộc loại s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
4:s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
byte = b'Name\tProfession\tAge\tIncome\nAlice\tProgrammer\t26\t88000\nBob\tEngineer\t21\t33000\nCarl\tStudent\t19\t-12000' print[type[byte]] #
Giải pháp nhanh chóng
Vì vậy, làm thế nào để chuyển đổi đối tượng
4 thành CSV?s=str[bytes_data,'utf-8']
file = open["data.txt","w"]
file.write[s]
df=pd.read_csv['data.txt']
Bạn có thể chuyển đổi đối tượng byte thành một chuỗi trong ba bước:
- Chuyển đổi đối tượng
1 thành một chuỗi bằng cách sử dụngimport pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
2 và cắtimport pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
3 để loại bỏ ký hiệu kèm theoimport pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
4.import pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
- Chẳng hạn, hãy chuyển đổi chuỗi thành chuỗi được định dạng CSV bằng cách sử dụng
5.import pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
- Viết CSV vào tệp bằng cách sử dụng hàm
6 bằng đối sốimport pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
7.import pandas as pd fname = './blah.csv' pd.Series[[b'x',b'y']].to_csv[fname]
Ví dụ tối thiểu
Tại đây, ví dụ về mã tối thiểu mà bạn có thể sao chép và dán:
________số 8Tệp CSV kết quả trông như thế này:
Lưu ý, chúng tôi sử dụng ký hiệu Escape Escape
import pandas as pd
fname = './blah.csv'
pd.Series[[b'x',b'y']].to_csv[fname]
8 và import pandas as pd
fname = './blah.csv'
pd.Series[[b'x',b'y']].to_csv[fname]
9 để loại bỏ ý nghĩa đặc biệt của tab và dòng mới vì trong chuỗi được chuyển đổi thu được từ biểu diễn byte, các ký tự tab và Newline hiện được biểu thị bằng hai ký tự >>> pd.read_csv[fname, dtype='S5']
0 b'x'
0 b'1' b"b'y'"
0 và >>> pd.read_csv[fname, dtype='S5']
0 b'x'
0 b'1' b"b'y'"
1 và các ký tự mới với hai ký tự >>> pd.read_csv[fname, dtype='S5']
0 b'x'
0 b'1' b"b'y'"
0 và >>> pd.read_csv[fname, dtype='S5']
0 b'x'
0 b'1' b"b'y'"
3.Ví dụ: nếu bạn in các ký tự chuỗi được chuyển đổi gốc [từ byte], bạn sẽ thấy vấn đề đó:
csv = str[byte][2:-1] for i,c in enumerate[csv]: print[i,c] ''' Output: 0 N 1 a 2 m 3 e 4 \ 5 t 6 P 7 r 8 o 9 f 10 e 11 s 12 s 13 i 14 o 15 n '''
Nói cách khác, chúng tôi muốn thay thế trình tự của hai ký tự đó bằng dấu phẩy duy nhất và ký tự mới.
Bạn có thể chuyển đổi nó sang bất kỳ định dạng nào khác như được chỉ định trong hướng dẫn liên quan này:
Tài nguyên liên quan: Hướng dẫn cuối cùng để chuyển đổi CSV sang định dạng khácRelated Resource: Ultimate Guide to Convert a CSV to another format
Trong khi làm việc như một nhà nghiên cứu trong các hệ thống phân tán, Tiến sĩ Christian Mayer đã tìm thấy tình yêu của mình đối với việc dạy các sinh viên khoa học máy tính.
Để giúp học sinh đạt được thành công cao hơn của Python, ông đã thành lập trang web giáo dục chương trình Finxter.com. Ông là tác giả của cuốn sách lập trình phổ biến Python Oneer [Nostarch 2020], đồng tác giả của loạt sách Break Break Python, những cuốn sách tự xuất bản, người đam mê khoa học máy tính, freelancer và chủ sở hữu của một trong 10 blog Python lớn nhất trên toàn thế giới.
Niềm đam mê của ông là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ tăng cường các kỹ năng của họ. Bạn có thể tham gia học viện email miễn phí của anh ấy ở đây.