Создание фрейма данных Pandas из строки
чтобы проверить некоторые функции, я хотел бы создать DataFrame
из строки. Допустим, мои тестовые данные выглядят так:
TESTDATA="""col1;col2;col3
1;4.4;99
2;4.5;200
3;4.7;65
4;3.2;140
"""
каков самый простой способ прочитать эти данные в панд DataFrame
?
2 ответа:
простой способ сделать это-использовать
StringIO
и передайте этоpandas.read_csv
традиционный CSV переменной ширины не читается для хранения данных в виде строковой переменной. Вместо этого рассмотрим данные, разделенные трубами фиксированной ширины. Различные IDE и редакторы могут иметь плагин для форматирования разделенного трубами текста в аккуратную таблицу.
следующие работы для меня. Чтобы использовать его, сохраните его в файл с именем
pandas_util.py
. Пример включен в строку документа функции. Если вы используете версию Python старше 3.6, удалить Примечания из определения функции линия.import re import pandas as pd def read_pipe_separated_str(str_input: str) -> pd.DataFrame: """Read a Pandas object from a pipe-separated table contained within a string. Example: | int_score | ext_score | eligible | | | 701 | True | | 221.3 | 0 | False | | | 576 | True | | 300 | 600 | True | The leading and trailing pipes are optional, but if one is present, so must be the other. In PyCharm, the "Pipe Table Formatter" plugin has a "Format" feature that can be used to neatly format a table. """ substitutions = [ ('^ *', ''), # Remove leading spaces (' *$', ''), # Remove trailing spaces (r' *\| *', '|'), # Remove spaces between columns ] if all(line.lstrip().startswith('|') and line.rstrip().endswith('|') for line in str_input.strip().split('\n')): substitutions.extend([ (r'^\|', ''), # Remove redundant leading delimiter (r'\|$', ''), # Remove redundant trailing delimiter ]) for pattern, replacement in substitutions: str_input = re.sub(pattern, replacement, str_input, flags=re.MULTILINE) return pd.read_csv(pd.compat.StringIO(str_input), sep='|')