パンダマージ101

468
cs95 2018-12-06 20:41.
  • パンダで(INNER|(LEFT| RIGHT| FULLOUTER)を実行する方法はJOIN
  • マージ後に欠落している行にNaNを追加するにはどうすればよいですか?
  • マージ後にNaNを取り除くにはどうすればよいですか?
  • インデックスでマージできますか?
  • パンダとのパフォーマンスの高いデカルト積(CROSS JOIN)
  • 複数のDataFrameをマージするにはどうすればよいですか?
  • mergejoinconcatupdate?WHO?何?なぜ?!

... もっと。パンダのマージ機能のさまざまな側面について尋ねるこれらの繰り返しの質問を見てきました。今日のマージとそのさまざまなユースケースに関する情報のほとんどは、不適切な言葉で検索できない数十の投稿に断片化されています。ここでの目的は、後世のためのより重要なポイントのいくつかを照合することです。

このQnAは、一般的なパンダのイディオムに関する一連の役立つユーザーガイドの次の記事となることを目的としています(データフレームをピボットする方法は?、およびPandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?データフレームをピボットする方法は?参照してください。データフレームをピボットする方法は?については後で触れます)。

この投稿はドキュメントの代わりになるものではないことに注意してください。それもお読みください。いくつかの例はそこから取られています。

3 answers

696
cs95 2018-12-06 20:41.

この投稿は、パンダとのSQLフレーバーのマージ、その使用方法、および使用しない場合の入門書を読者に提供することを目的としています。

特に、この投稿の内容は次のとおりです。

  • 基本-結合のタイプ(LEFT、RIGHT、OUTER、INNER)

    • 異なる列名とのマージ
    • 出力でのマージキー列の重複を回避する
  • さまざまな条件下でのインデックスとのマージ

    • 名前付きインデックスを効果的に使用する
    • あるキーと別の列のインデックスとしてキーをマージします
  • 列とインデックスの多方向マージ(一意および非一意)

  • mergeおよびの注目すべき代替案join

この投稿が通過しないもの:

  • パフォーマンス関連の議論とタイミング(今のところ)。必要に応じて、より良い代替案についての最も注目すべき言及。
  • サフィックスの処理、余分な列の削除、出力の名前変更、およびその他の特定のユースケース。それを扱っている他の(読む:より良い)投稿があるので、それを理解してください!


ほとんどの例では、特に指定がない限り、さまざまな機能を示しながら、デフォルトでINNERJOIN操作が実行されます。

さらに、ここにあるすべてのDataFrameをコピーして複製できるため、それらを操作できます。また、 クリップボードからDataFrameを読み取る方法については、スタックオーバーフローからPythonにDataFrameをコピーして貼り付ける方法を参照してください。

最後に、JOIN操作のすべての視覚的表現は、Google図形描画を使用して手描きされています。ここからのインスピレーション。

十分な話、使い方を教えてくださいmerge

セットアップ

np.random.seed(0)
left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': np.random.randn(4)})    
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': np.random.randn(4)})
  
left

  key     value
0   A  1.764052
1   B  0.400157
2   C  0.978738
3   D  2.240893

right

  key     value
0   B  1.867558
1   D -0.977278
2   E  0.950088
3   F -0.151357

簡単にするために、キー列の名前は同じです(今のところ)。

アンINNER JOINはで表され、


これは、今後の図とともに、すべてこの規則に従います。

  • は、マージ結果に存在する行を示します
  • は、結果から除外された(つまり削除された)行を示します
  • NaN、結果でsに置き換えられる欠落値を示します

INNER JOINを実行するmergeには、左側のDataFrameを呼び出し、右側のDataFrameと結合キー(少なくとも)を引数として指定します。

left.merge(right, on='key')
# Or, if you want to be explicit
# left.merge(right, on='key', how='inner')

  key   value_x   value_y
0   B  0.400157  1.867558
1   D  2.240893 -0.977278

この戻り行のみからleftright共有する共通鍵(この例では、「B」および「D)。

A LEFT OUTER JOIN、またはLEFT JOINは、がで表され

これは、を指定することで実行できますhow='left'

left.merge(right, on='key', how='left')

  key   value_x   value_y
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278

ここでNaNの配置に注意してください。を指定するとhow='left'、からのキーのみleftが使用され、から欠落しているデータrightはNaNに置き換えられます。

同様に、RIGHT OUTER JOIN、またはRIGHTJOINの場合は...

...具体的にhow='right'

left.merge(right, on='key', how='right')

  key   value_x   value_y
0   B  0.400157  1.867558
1   D  2.240893 -0.977278
2   E       NaN  0.950088
3   F       NaN -0.151357

ここでは、fromのキーrightが使用され、fromの欠落データleftはNaNに置き換えられます。

最後に、FULL OUTER JOINの場合、

を指定しますhow='outer'

left.merge(right, on='key', how='outer')

  key   value_x   value_y
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278
4   E       NaN  0.950088
5   F       NaN -0.151357

これは両方のフレームのキーを使用し、両方の行が欠落している場合はNaNが挿入されます。

ドキュメントには、これらのさまざまなマージがうまくまとめられています。

その他の結合-左-除外、右-除外、および完全-除外/ ANTI結合

左-JOINの除外右-JOINの除外が2つのステップで必要な場合。

左の場合-JOINを除く、

LEFT OUTER JOINを実行することから始めて、次に、leftのみからの行をフィルタリング(!を除く)します。

(left.merge(right, on='key', how='left', indicator=True)
     .query('_merge == "left_only"')
     .drop('_merge', 1))

  key   value_x  value_y
0   A  1.764052      NaN
2   C  0.978738      NaN

どこ、

left.merge(right, on='key', how='left', indicator=True)

  key   value_x   value_y     _merge
0   A  1.764052       NaN  left_only
1   B  0.400157  1.867558       both
2   C  0.978738       NaN  left_only
3   D  2.240893 -0.977278       both

同様に、右を除くJOINの場合、

(left.merge(right, on='key', how='right', indicator=True)
     .query('_merge == "right_only"')
     .drop('_merge', 1))

  key  value_x   value_y
2   E      NaN  0.950088
3   F      NaN -0.151357

最後に、左または右のキーのみを保持し、両方は保持しないマージを実行する必要がある場合(IOW、ANTI-JOINの実行)、

同様の方法でこれを行うことができます—

(left.merge(right, on='key', how='outer', indicator=True)
     .query('_merge != "both"')
     .drop('_merge', 1))

  key   value_x   value_y
0   A  1.764052       NaN
2   C  0.978738       NaN
4   E       NaN  0.950088
5   F       NaN -0.151357

キー列の異なる名前

キー列の名前が異なる場合(たとえば、lefthas keyLeftrighthasのkeyRight代わりにhas)、引数としてとkeyを指定する必要がleft_onあります。right_onon

left2 = left.rename({'key':'keyLeft'}, axis=1)
right2 = right.rename({'key':'keyRight'}, axis=1)

left2
 
  keyLeft     value
0       A  1.764052
1       B  0.400157
2       C  0.978738
3       D  2.240893

right2

  keyRight     value
0        B  1.867558
1        D -0.977278
2        E  0.950088
3        F -0.151357
left2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner')

  keyLeft   value_x keyRight   value_y
0       B  0.400157        B  1.867558
1       D  2.240893        D -0.977278

出力でのキー列の重複の回避

keyLeftfromleftkeyRightfromをマージするときに、出力にまたはのrightいずれkeyLeftkeyRight(両方ではない)のみが必要な場合は、準備段階としてインデックスを設定することから始めることができます。

left3 = left2.set_index('keyLeft')
left3.merge(right2, left_index=True, right_on='keyRight')
    
    value_x keyRight   value_y
0  0.400157        B  1.867558
1  2.240893        D -0.977278

これを直前のコマンドの出力(つまり、の出力left2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner'))と比較すると、keyLeft欠落していることがわかります。どのフレームのインデックスがキーとして設定されているかに基づいて、どの列を保持するかを判断できます。これは、たとえば、OUTERJOIN操作を実行するときに問題になる可能性があります。

の1つから1つの列のみをマージする DataFrames

たとえば、

right3 = right.assign(newcol=np.arange(len(right)))
right3
  key     value  newcol
0   B  1.867558       0
1   D -0.977278       1
2   E  0.950088       2
3   F -0.151357       3

「new_val」のみ(他の列は含まない)のみをマージする必要がある場合は、通常、マージする前に列をサブセット化することができます。

left.merge(right3[['key', 'newcol']], on='key')

  key     value  newcol
0   B  0.400157       0
1   D  2.240893       1

LEFT OUTER JOINを実行している場合、よりパフォーマンスの高いソリューションにはmap次のものが含まれます。

# left['newcol'] = left['key'].map(right3.set_index('key')['newcol']))
left.assign(newcol=left['key'].map(right3.set_index('key')['newcol']))

  key     value  newcol
0   A  1.764052     NaN
1   B  0.400157     0.0
2   C  0.978738     NaN
3   D  2.240893     1.0

前述のように、これは似ていますが、より高速です

left.merge(right3[['key', 'newcol']], on='key', how='left')

  key     value  newcol
0   A  1.764052     NaN
1   B  0.400157     0.0
2   C  0.978738     NaN
3   D  2.240893     1.0

複数の列にマージする

複数の列に参加するには、on(またはleft_onおよびright_on、必要に応じて)のリストを指定します。

left.merge(right, on=['key1', 'key2'] ...)

または、名前が異なる場合は、

left.merge(right, left_on=['lkey1', 'lkey2'], right_on=['rkey1', 'rkey2'])

その他の便利なmerge*操作と機能

  • DataFrameとインデックスのシリーズのマージこの回答を参照してください。

  • に加えてmergeDataFrame.updateおよびDataFrame.combine_first特定の場合に、あるDataFrameを別のDataFrameで更新するためにも使用されます。

  • pd.merge_ordered 順序付けられたJOINに便利な関数です。

  • pd.merge_asof(読み取り:merge_asOf)は、近似結合に役立ちます。

このセクションは非常に基本的なことだけをカバーし、あなたの食欲を刺激することだけを目的としています。より多くの例と例については、参照のドキュメントをmergejoinconcatだけでなく、機能仕様へのリンク。


インデックスベース* -JOIN(+ index-column merges)

セットアップ

np.random.seed([3, 14])
left = pd.DataFrame({'value': np.random.randn(4)}, index=['A', 'B', 'C', 'D'])    
right = pd.DataFrame({'value': np.random.randn(4)}, index=['B', 'D', 'E', 'F'])
left.index.name = right.index.name = 'idxkey'

left
           value
idxkey          
A      -0.602923
B      -0.402655
C       0.302329
D      -0.524349

right
 
           value
idxkey          
B       0.543843
D       0.013135
E      -0.326498
F       1.385076

通常、インデックスのマージは次のようになります。

left.merge(right, left_index=True, right_index=True)


         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

インデックス名のサポート

あなたのインデックスが命名されている場合は、v0.23ユーザーもにレベル名を指定することができますon(またはleft_onおよびright_on必要に応じて)。

left.merge(right, on='idxkey')

         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

1つのインデックス、別の列のマージ

あるインデックスと別の列を使用してマージを実行することは可能です(そして非常に簡単です)。例えば、

left.merge(right, left_on='key1', right_index=True)

またはその逆(right_on=...およびleft_index=True)。

right2 = right.reset_index().rename({'idxkey' : 'colkey'}, axis=1)
right2
 
  colkey     value
0      B  0.543843
1      D  0.013135
2      E -0.326498
3      F  1.385076

left.merge(right2, left_index=True, right_on='colkey')

    value_x colkey   value_y
0 -0.402655      B  0.543843
1 -0.524349      D  0.013135

この特殊なケースでは、のインデックスにleft名前が付けられているためleft_on、次のようにインデックス名をと一緒に使用することもできます。

left.merge(right2, left_on='idxkey', right_on='colkey')

    value_x colkey   value_y
0 -0.402655      B  0.543843
1 -0.524349      D  0.013135

DataFrame.join
これらに加えて、別の簡潔なオプションがあります。DataFrame.joinインデックスで結合するデフォルトを使用できます。DataFrame.joinデフォルトでLEFTOUTER JOINを実行するため、ここhow='inner'で必要です。

left.join(right, how='inner', lsuffix='_x', rsuffix='_y')

         value_x   value_y
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

エラーが発生するためlsuffixrsuffix引数と引数を指定する必要があることに注意してくださいjoin

left.join(right)
ValueError: columns overlap but no suffix specified: Index(['value'], dtype='object')
 

列名が同じなので。名前が異なっていれば、これは問題にはなりません。

left.rename(columns={'value':'leftvalue'}).join(right, how='inner')

        leftvalue     value
idxkey                     
B       -0.402655  0.543843
D       -0.524349  0.013135

pd.concat
最後に、インデックスベースの結合の代わりに、次を使用できますpd.concat

pd.concat([left, right], axis=1, sort=False, join='inner')

           value     value
idxkey                    
B      -0.402655  0.543843
D      -0.524349  0.013135

join='inner'完全外部結合が必要な場合は省略します(デフォルト):

pd.concat([left, right], axis=1, sort=False)

      value     value
A -0.602923       NaN
B -0.402655  0.543843
C  0.302329       NaN
D -0.524349  0.013135
E       NaN -0.326498
F       NaN  1.385076

詳細についてPandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?参照Pandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?Pandasのconcat関数の「levels」、「keys」、およびnames引数とは何ですか?


一般化:merge複数のDataFrameを作成する

多くの場合、この状況は、複数のDataFrameをマージするときに発生します。素朴に、これはmerge呼び出しを連鎖させることによって行うことができます。

df1.merge(df2, ...).merge(df3, ...)

ただし、これは多くのDataFrameですぐに手に負えなくなります。さらに、不明な数のDataFrameを一般化する必要がある場合があります。

ここで私は紹介pd.concatマルチウェイは、上の加入のためのユニークなキー、およびDataFrame.joinマルチウェイのために参加する非ユニークキー。まず、セットアップ。

# Setup.
np.random.seed(0)
A = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'valueA': np.random.randn(4)})    
B = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'valueB': np.random.randn(4)})
C = pd.DataFrame({'key': ['D', 'E', 'J', 'C'], 'valueC': np.ones(4)})
dfs = [A, B, C] 

# Note, the "key" column values are unique, so the index is unique.
A2 = A.set_index('key')
B2 = B.set_index('key')
C2 = C.set_index('key')

dfs2 = [A2, B2, C2]

一意キー(またはインデックス)での多方向マージ

キー(ここでは、キーは列またはインデックスのいずれか)が一意である場合は、を使用できますpd.concatpd.concatインデックスでDataFrame結合すること注意してください。

# merge on `key` column, you'll need to set the index before concatenating
pd.concat([
    df.set_index('key') for df in dfs], axis=1, join='inner'
).reset_index()

  key    valueA    valueB  valueC
0   D  2.240893 -0.977278     1.0

# merge on `key` index
pd.concat(dfs2, axis=1, sort=False, join='inner')

       valueA    valueB  valueC
key                            
D    2.240893 -0.977278     1.0

join='inner'完全な外部結合は省略してください。LEFTまたはRIGHTOUTER結合を指定できないことに注意してください(これらが必要な場合はjoin、以下で説明するを使用してください)。

重複するキーの多方向マージ

concat高速ですが、欠点があります。重複は処理できません。

A3 = pd.DataFrame({'key': ['A', 'B', 'C', 'D', 'D'], 'valueA': np.random.randn(5)})
pd.concat([df.set_index('key') for df in [A3, B, C]], axis=1, join='inner')
ValueError: Shape of passed values is (3, 4), indices imply (3, 2)

この状況では、join一意でないキーを処理できるため、を使用できます(joinインデックスでDataFrameを結合することに注意してくださいmerge。特に指定がない限り、内部で呼び出し、LEFT OUTER JOINを実行します)。

# join on `key` column, set as the index first
# For inner join. For left join, omit the "how" argument.
A.set_index('key').join(
    [df.set_index('key') for df in (B, C)], how='inner').reset_index()

  key    valueA    valueB  valueC
0   D  2.240893 -0.977278     1.0

# join on `key` index
A3.set_index('key').join([B2, C2], how='inner')

       valueA    valueB  valueC
key                            
D    1.454274 -0.977278     1.0
D    0.761038 -0.977278     1.0
62
eliu 2019-04-26 13:43.

の補足的な視覚的ビューpd.concat([df0, df1], kwargs)。お知らせ、kwargことaxis=0axis=1の意味はほど直感的ではありませんdf.mean()df.apply(func)


5
Gonçalo Peres 龚燿禄 2020-08-11 00:13.

この回答では、の実際的な例を検討しpandas.concatます。

DataFrames同じ列名で次のことを考慮してください。

Preco2018サイズ(8784、5)

Preco 2019サイズ(8760、5)

同じ列名です。

を使用してpandas.concat、簡単にそれらを組み合わせることができます

import pandas as pd

frames = [Preco2018, Preco2019]

df_merged = pd.concat(frames)

これにより、次のサイズのDataFrameが生成されます(17544、5)

視覚化したい場合は、このように動作することになります

出典

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

引退した一郎:「私はただ死ぬと思う」

引退した一郎:「私はただ死ぬと思う」

写真:リッチシュルツ/ APマーリンズ外野手/野球のトゥルーヒットキング鈴木一郎は43歳ですが、近い将来、プロ野球をやめるつもりはありません。昨年、彼は143試合に出場し、ヒットしました。

12年後、有名なクラブペンギン氷山がついにヒント

12年後、有名なクラブペンギン氷山がついにヒント

約12年間の運用後、ディズニーの子供向けのMMOクラブペンギンは閉店しますが、プレーヤーがゲームで最も長く実行されているミームの1つを実現する機会を得る前ではありません。氷山がひっくり返った。

安い航空券はあなたが思っているほどお得ではありません

安い航空券はあなたが思っているほどお得ではありません

お気に入りのレストランが割引価格で食事を提供し始めたが、ナプキン、フォーク、または座席が必要な場合は追加料金を支払う必要があるとします。私たちのほとんどはおそらく彼らに私たちのビジネスを与えることを躊躇するでしょうが、その躊躇は航空運賃に変換されません。

注意してください、あなたが話す次の男はUFCファイターかもしれません

注意してください、あなたが話す次の男はUFCファイターかもしれません

マークハントはUFCで最もヘビーな打者かもしれません。彼はほぼ間違いなく、現在オーストラリアに住んでいる最もタフなファイターです。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

安全な公衆パニックルーム

安全な公衆パニックルーム

不気味な音に慣れて、コンクリートの周りをうろつきます。痛みや苦い口を吐き出し、「過ち」の不思議な病気を通してもう一度味わうことを切望します。

長い間行方不明だった 2 つのサンフランシスコ クリークが間もなく日の目を見る可能性がある

都市の水路を回復する理由はたくさんありますが、気候が変化するにつれて、それらはすべてより持続可能な未来につながります.

長い間行方不明だった 2 つのサンフランシスコ クリークが間もなく日の目を見る可能性がある

サンフランシスコの長い間失われた小川を復元する動きが高まっており、コミュニティを地域の生態系と結びつけ、また、都市が気候変動や季節的な洪水に適応するのに役立つ新しいタイプの「グリーン インフラストラクチャ」を作成しています。最新の取り組みは町の 2 つの非常に異なる場所で行われており、それらは明確ではあるが補完的な方法で展開されています。

サンフランシスコのベイエリアで家族写真が撮れる場所トップ 5

サンフランシスコのベイエリアで家族写真が撮れる場所トップ 5

ベイエリアには写真を撮るための美しい屋外スポットがたくさんあります。この記事のすべての写真は、ベイエリアにいるさまざまな PictureHum フォトグラファーとの PictureHum セッションからのものです。

退屈に耐えられないから生きていけない

退屈に耐えられないから生きていけない

それが現代の衝動です — より少ないもので世界を覆し、私たちのほんのわずかな瞬間を自分たちから盗もうとする. 私はかつてダイニングルームのソファで一日を過ごし、祖父母の農家に斜めに差し込む光を眺め、私には関係のない世界について話している大人のつぶやきを半分聞いたり、壁を通してくぐもったテレビを聞いたり、遊んだりしました。床と犬と私の小さな靴を暖めた太陽の黒点と。

Language