Python データ処理パンダでの読み取りおよび書き込み操作のための IO ツールとして CSV を使用する
まえがき
pandas
IO
API
それpandas.read_csv()
などのトップレベルの reader
関数のセットで、pandas
オブジェクトを返します。
対応する writer
関数は、DataFrame.to_csv()
などのオブジェクト メソッドです。
注: StringIO
は後で使用します。必ず
# python3 from io import StringIO # python2 from StringIO import StringIO
1 CSV およびテキスト ファイルをインポートしてください
テキスト ファイルを読み取るメイン関数isread_csv()
1 パラメータ分析
read_csv()
次の共通パラメータを受け入れます:
1.1 基本
filepath_or_buffer
: 変数
には、ファイル パス、ファイル
URL
、またはread() を使用するものを指定できます。
関数オブジェクト
sep
: str
、デフォルト ,
、read_table
用これは \t
ファイル区切り文字です。
None
に設定すると、C
エンジンは区切り文字を自動的に検出できません。およびPython
エンジンは、組み込みのスニファー ツールを通じて自動的に区切り文字を検出できます。さらに、設定された文字長が
1
より大きく、'\s '
でない場合、文字列は解析されます。正規表現として使用し、Python
解析エンジンの使用を強制します。たとえば、
'\\r\\t'
ですが、正規表現ではテキスト内の参照データが無視される傾向があります。
delimiter
: str
、デフォルトは None
sep
の代替パラメータ、機能は同じです
1.2 列、インデックス、名前
header
: int
または list
、デフォルトは 'infer'
列名として使用される行番号。デフォルトの動作は次のとおりです。列名を推測します:
names
パラメータが指定されていない場合、動作はheader=0
と同様になります。つまり、最初の行から読んでください。names
が設定されている場合、動作はheader=None
と同じです。header
のリストを設定して、複数レベルの列名を表すこともできます。たとえば、[0,1,3]
、未指定の行 (ここでは2
) はスキップされます。skip_blank_lines=True
の場合、それらはスキップされます。空白行とコメント行。したがって、header=0
は、ファイル
names
: array-like
の最初の行を表しません。デフォルトは None
設定する必要がある列名のリストです。ファイルにヘッダー行が含まれていない場合、
header=None
は明示的に渡す必要があり、このリストでは重複する値は許可されません。
index_col
: int
, str
, int/str
のシーケンス, False
、デフォルトは None
DataFrame
のインデックスとして使用される列。指定された文字列名または列インデックス。リストが指定されている場合は、MultiIndex
注:
index_col=False
を使用すると、pandas
を強制的に無効にすることができます。 to 1 つの列がインデックスとして使用されます。たとえば、ファイルが各行の末尾に区切り文字がある不正なファイルである場合です。
usecols
: リストまたは関数、デフォルトは None
指定されたリストのみを読み取ります。リストの場合、すべての要素は位置指定 (つまり、ファイルの列への整数インデックス) であるか、
names
パラメーターで指定された列名、またはドキュメントのヘッダー行から推測された列名と一致する文字列である必要があります。リスト内の順序は無視されます。つまり、
usecols=[0, 1]
は[1, 0]## と同等です。
- #呼び出し可能な関数の場合、列名と呼び出し可能な関数の名前に基づいて計算されます。
True
##
In [1]: import pandas as pd In [2]: from io import StringIO In [3]: data = "col1,col2,col3\na,b,1\na,b,2\nc,d,3" In [4]: pd.read_csv(StringIO(data)) Out[4]: col1 col2 col3 0 a b 1 1 a b 2 2 c d 3 In [5]: pd.read_csv(StringIO(data), usecols=lambda x: x.upper() in ["COL1", "COL3"]) Out[5]: col1 col3 0 a 1 1 a 2 2 c 3
squeeze:
boolean、デフォルトは
False
- 解析されたデータに列が 1 つしか含まれていない場合は、
Series
str、デフォルトは
None## タイトルがない場合、自動生成された列番号にプレフィックスが追加されます (例: ##)。 #'X'
- X0
- ,
X1
:...
mangle_dupe_cols
boolean を意味します
True です
重复的列将被指定为
'X'
,'X.1'
…'X.N'
,而不是'X'
... 。如果在列中有重复的名称,传递False
将导致数据被覆盖
1.3 常规解析配置
dtype
: 类型名或类型字典(column -> type
), 默认为 None
数据或列的数据类型。例如。
{'a':np.float64,'b':np.int32}
engine
: {'c', 'python'}
要使用的解析器引擎。
C
引擎更快,而Python
引擎目前功能更完整
converters
: dict
, 默认为 None
用于在某些列中对值进行转换的函数字典。键可以是整数,也可以是列名
true_values
: list
, 默认为 None
数据值解析为
True
false_values
: list
, 默认为 None
数据值解析为
False
skipinitialspace
: boolean
, 默认为 False
跳过分隔符之后的空格
skiprows
: 整数或整数列表, 默认为 None
在文件开头要跳过的行号(索引为
0
)或要跳过的行数如果可调用函数,则对索引应用函数,如果返回
True
,则应跳过该行,否则返回False
In [6]: data = "col1,col2,col3\na,b,1\na,b,2\nc,d,3" In [7]: pd.read_csv(StringIO(data)) Out[7]: col1 col2 col3 0 a b 1 1 a b 2 2 c d 3 In [8]: pd.read_csv(StringIO(data), skiprows=lambda x: x % 2 != 0) Out[8]: col1 col2 col3 0 a b 2
skipfooter
: int
, 默认为 0
需要跳过文件末尾的行数(不支持
C
引擎)
nrows
: int
, 默认为 None
要读取的文件行数,对于读取大文件很有用
memory_map
: boolean
, 默认为 False
如果为
filepath_or_buffer
参数指定了文件路径,则将文件对象直接映射到内存中,然后直接从那里访问数据。使用此选项可以提高性能,因为不再有任何I/O
开销
1.4 NA 和缺失数据处理
na_values
: scalar
, str
, list-like
, dict
, 默认为 None
需要转换为
NA
值的字符串
keep_default_na
: boolean
, 默认为 True
解析数据时是否包含默认的
NaN
值。根据是否传入na_values
,其行为如下keep_default_na=True
, 且指定了na_values
,na_values
将会与默认的NaN
一起被解析keep_default_na=True
, 且未指定na_values
, 只解析默认的NaN
keep_default_na=False
, 且指定了na_values
, 只解析na_values
指定的NaN
keep_default_na=False
, 且未指定na_values
, 字符串不会被解析为NaN
注意:如果 na_filter=False
,那么 keep_default_na
和 na_values
参数将被忽略
na_filter
: boolean
, 默认为 True
检测缺失值标记(空字符串和
na_values
的值)。在没有任何NA
的数据中,设置na_filter=False
可以提高读取大文件的性能
skip_blank_lines
: boolean
, 默认为 True
如果为
True
,则跳过空行,而不是解释为NaN
值
1.5 日期时间处理
parse_dates
: 布尔值、列表或嵌套列表、字典, 默认为 False
.
如果为
True
-> 尝试解析索引如果为
[1, 2, 3]
-> 尝试将1, 2, 3
列解析为分隔的日期如果为
[[1, 3]]
-> 将1, 3
列解析为单个日期列如果为
{'foo': [1, 3]}
-> 将1, 3
列作为日期并设置列名为foo
infer_datetime_format
: 布尔值, 默认为 False
如果设置为
True
且设置了parse_dates
,则尝试推断datetime
格式以加快处理速度
date_parser
: 函数, 默认为 None
用于将字符串序列转换为日期时间实例数组的函数。默认使用
dateutil.parser.parser
进行转换,pandas
将尝试以三种不同的方式调用date_parser
传递一个或多个数组(
parse_dates
定义的列)作为参数;将
parse_dates
定义的列中的字符串值连接到单个数组中,并将其传递;使用一个或多个字符串(对应于
parse_dates
定义的列)作为参数,对每一行调用date_parser
一次。
dayfirst
: 布尔值, 默认为 False
DD/MM
格式的日期
cache_dates
: 布尔值, 默认为 True
如果为
True
,则使用唯一的、经过转换的日期缓存来应用datetime
转换。在解析重复的日期字符串,特别是带有时区偏移量的日期字符串时,可能会显著提高速度。
1.6 迭代
iterator
: boolean
, 默认为 False
返回
TextFileReader
对象以进行迭代或使用get_chunk()
来获取块
1.7 引用、压缩和文件格式
compression
: {'infer', 'gzip', 'bz2', 'zip', 'xz', None, dict}
, 默认为 'infer'
用于对磁盘数据进行即时解压缩。如果为
"infer"
,则如果filepath_or_buffer
是文件路径且以".gz"
,".bz2"
,".zip"
或".xz"
结尾,则分别使用gzip
,bz2
,zip
或xz
解压,否则不进行解压缩。如果使用
"zip"
,则ZIP
文件必须仅包含一个要读取的数据文件。设置为None
表示不解压也可以使用字典的方式,键为
method
的值从{'zip', 'gzip', 'bz2'}
中选择。例如
compression={'method': 'gzip', 'compresslevel': 1, 'mtime': 1}
thousandsstr
, 默认为 None
数值在千位的分隔符
decimal
: str
, 默认为 '.'
小数点
float_precision
: string
, 默认为 None
指定
C
引擎应该使用哪个转换器来处理浮点值。普通转换器的选项为None
,高精度转换器的选项为high
,双向转换器的选项为round_trip
。
quotechar
: str
(长度为 1
)
用于表示被引用数据的开始和结束的字符。带引号的数据里的分隔符将被忽略
comment
: str
, 默认为 None
用于跳过该字符开头的行,例如,如果
comment='#'
,将会跳过#
开头的行
encoding
: str
, 默认为 None
设置编码格式
1.8 错误处理
error_bad_linesboolean
, 默认为 True
默认情况下,字段太多的行(例如,带有太多逗号的
csv
文件)会引发异常,并且不会返回任何DataFrame
。如果设置为
False
,则这些坏行将会被删除
warn_bad_linesboolean
, 默认为 True
如果
error_bad_lines=False
且warn_bad_lines=True
,每个坏行都会输出一个警告
2. 指定数据列的类型
您可以指示整个 DataFrame
或各列的数据类型
In [9]: import numpy as np In [10]: data = "a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11" In [11]: print(data) a,b,c,d 1,2,3,4 5,6,7,8 9,10,11 In [12]: df = pd.read_csv(StringIO(data), dtype=object) In [13]: df Out[13]: a b c d 0 1 2 3 4 1 5 6 7 8 2 9 10 11 NaN In [14]: df["a"][0] Out[14]: '1' In [15]: df = pd.read_csv(StringIO(data), dtype={"b": object, "c": np.float64, "d": "Int64"}) In [16]: df.dtypes Out[16]: a int64 b object c float64 d Int64 dtype: object
你可以使用 read_csv()
的 converters
参数,统一某列的数据类型
In [17]: data = "col_1\n1\n2\n'A'\n4.22" In [18]: df = pd.read_csv(StringIO(data), converters={"col_1": str}) In [19]: df Out[19]: col_1 0 1 1 2 2 'A' 3 4.22 In [20]: df["col_1"].apply(type).value_counts() Out[20]: <class 'str'> 4 Name: col_1, dtype: int64
或者,您可以在读取数据后使用 to_numeric()
函数强制转换类型
In [21]: df2 = pd.read_csv(StringIO(data)) In [22]: df2["col_1"] = pd.to_numeric(df2["col_1"], errors="coerce") In [23]: df2 Out[23]: col_1 0 1.00 1 2.00 2 NaN 3 4.22 In [24]: df2["col_1"].apply(type).value_counts() Out[24]: <class 'float'> 4 Name: col_1, dtype: int64
它将所有有效的数值转换为浮点数,而将无效的解析为 NaN
最后,如何处理包含混合类型的列取决于你的具体需要。在上面的例子中,如果您只想要将异常的数据转换为 NaN
,那么 to_numeric()
可能是您的最佳选择。
然而,如果您想要强制转换所有数据,而无论类型如何,那么使用 read_csv()
的 converters
参数会更好
注意
在某些情况下,读取包含混合类型列的异常数据将导致数据集不一致。
如果您依赖 pandas
来推断列的类型,解析引擎将继续推断数据块的类型,而不是一次推断整个数据集。
In [25]: col_1 = list(range(500000)) + ["a", "b"] + list(range(500000)) In [26]: df = pd.DataFrame({"col_1": col_1}) In [27]: df.to_csv("foo.csv") In [28]: mixed_df = pd.read_csv("foo.csv") In [29]: mixed_df["col_1"].apply(type).value_counts() Out[29]: <class 'int'> 737858 <class 'str'> 262144 Name: col_1, dtype: int64 In [30]: mixed_df["col_1"].dtype Out[30]: dtype('O')
这就导致 mixed_df
对于列的某些块包含 int
类型,而对于其他块则包含 str
,这是由于读取的数据是混合类型。
以上がPython データ処理パンダでの読み取りおよび書き込み操作のための IO ツールとして CSV を使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Pytorchの分散トレーニングでは、Centosシステムでトレーニングには次の手順が必要です。Pytorchのインストール:PythonとPipがCentosシステムにインストールされていることです。 CUDAバージョンに応じて、Pytorchの公式Webサイトから適切なインストールコマンドを入手してください。 CPUのみのトレーニングには、次のコマンドを使用できます。PipinstalltorchtorchtorchvisionTorchaudioGPUサポートが必要な場合は、CUDAとCUDNNの対応するバージョンがインストールされ、インストールに対応するPytorchバージョンを使用してください。分散環境構成:分散トレーニングには、通常、複数のマシンまたは単一マシンの複数GPUが必要です。場所

MINIOオブジェクトストレージ:CENTOSシステムの下での高性能展開Minioは、Amazons3と互換性のあるGO言語に基づいて開発された高性能の分散オブジェクトストレージシステムです。 Java、Python、JavaScript、Goなど、さまざまなクライアント言語をサポートしています。この記事では、CentosシステムへのMinioのインストールと互換性を簡単に紹介します。 Centosバージョンの互換性Minioは、Centos7.9を含むがこれらに限定されない複数のCentosバージョンで検証されています。

PytorchをCentosシステムにインストールする場合、適切なバージョンを慎重に選択し、次の重要な要因を検討する必要があります。1。システム環境互換性:オペレーティングシステム:Centos7以上を使用することをお勧めします。 Cuda and Cudnn:PytorchバージョンとCudaバージョンは密接に関連しています。たとえば、pytorch1.9.0にはcuda11.1が必要ですが、pytorch2.0.1にはcuda11.3が必要です。 CUDNNバージョンは、CUDAバージョンとも一致する必要があります。 Pytorchバージョンを選択する前に、互換性のあるCUDAおよびCUDNNバージョンがインストールされていることを確認してください。 Pythonバージョン:Pytorch公式支店

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。
